好的脚本编写者,
我仍在努力将自己的头缠在FOR命令周围。我想做的就是将所有子文件夹中的所有文件重命名为它们所在的文件夹名称,并保留其扩展名。我想像可以用类似的方法做到这一点:
For /R %X in (*.*) do REN %X <argument for parent folder name>
也许我错了。正确的方法是什么?它必须是一个脚本。我没有询问批量重命名实用程序或文件重命名豪华版等。
谢谢你的时间!
仅当每个文件夹中的任何给定类型的文件数量都超过一个时,您才可以实现既定目标。除非有异常情况,否则这不是合理的期望。
但是可以在每个文件的前面插入父文件夹的名称-类似于
"fileName.ext" --> "parentFolderName_fileName.ext"
该FOR /R
命令可以迭代根树中所有文件夹的文件夹路径。
该DIR /B /A-D "folderPath"
命令可以列出文件夹中的所有文件。但是,您不想重命名以父文件夹名称开头的Aready文件,因此可以将其通过管道传递给FINDSTR以排除已重命名的文件。
可以使用FOR / F迭代管道命令的结果。EOL和DELIMS选项用于确保保留每个文件的全名。
该%%~nxD
只返回文件夹的名字和父文件夹的扩展。
将所有内容放在一起,可以在命令行上直接使用以下一个长的衬纸。它将处理以当前目录为根的树。
for /r %D in (.) do @for /f "eol=: delims=" %F in ('dir /b /a-d "%D" 2^>nul^|findstr /vbic:"%~nxD_"') do ren "%D\%F" "%~nxD_%F"
可以将命令放在脚本中,然后可以将要处理的根文件夹作为参数传递。如果未提供任何参数,则脚本将从当前目录开始处理。如果提供了一个参数,则将该值用作根文件夹。
@for /r %1 %%D in (.) do @for /f "eol=: delims=" %%F in (
'dir /b /a-d "%%D" 2^>nul^|findstr /vbic:"%%~nxD_"'
) do ren "%%D\%%F" "%%~nxD_%%F"
如果使用我的JREN.BAT正则表达式重命名实用工具,则代码会更简单。它是纯脚本(混合批处理/ JScript),可从XP开始在任何Windows计算机上本地运行。不需要第三方exe文件。
完整的文档嵌入在实用程序中-可通过jren /?
或jren /??
如果要分页输出来访问。
以下简单命令将处理以当前目录为根的树:
for /r %F in (.) do @call jren "^" "%~nxF_" /p "%F" /fx "%~nxF_*"
前两个JREN参数是查找/替换字符串-搜索匹配文件名的开头,替换仅插入父文件夹名(带有下划线)。该/P "%F"
选项指定根文件夹。并且该/FX "%~nxF_*
选项不包括已经以父文件夹名称开头,后跟下划线的文件。
可以将命令放在批处理脚本中,该脚本接受可选的根文件夹作为参数(如果未提供值,则处理当前目录):
@echo off
for /r %1 %%F in (.) do call jren "^" "%%~nxF_" /p "%%F" /fx "%%~nxF_*"
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句