Batch file CMD递归地批量重命名与模式匹配的文件
这是我在这里的第一个问题,请原谅我的无知,以防我错过了最佳实践。我已经查看了以前对类似任务的请求,但无法将它们的解决方案应用于下面描述的情况 这是一个CMD批处理脚本,用于仅重命名目录及其子目录中的某些文件。所有文件共享相同的模式:Batch file CMD递归地批量重命名与模式匹配的文件,batch-file,cmd,batch-rename,Batch File,Cmd,Batch Rename,这是我在这里的第一个问题,请原谅我的无知,以防我错过了最佳实践。我已经查看了以前对类似任务的请求,但无法将它们的解决方案应用于下面描述的情况 这是一个CMD批处理脚本,用于仅重命名目录及其子目录中的某些文件。所有文件共享相同的模式: FILENAME 0000.png 其中0000为任意四位数字。多亏了前面的解决方案,我确实有了一个目录的工作代码,唉,添加/r并没有使它递归 下面是我当前CMD.bat(Win10 x64)中的一段代码片段,当仅在一个目录中重命名文件时,删除/r效果良好: :di
FILENAME 0000.png
其中0000为任意四位数字。多亏了前面的解决方案,我确实有了一个目录的工作代码,唉,添加/r
并没有使它递归
下面是我当前CMD.bat(Win10 x64)中的一段代码片段,当仅在一个目录中重命名文件时,删除/r
效果良好:
:dir_files_rename
SETLOCAL
SET "Path=G:\to\dir"
SETLOCAL enabledelayedexpansion
for /r %%f in ("%Path%\*.png") do if %%f neq %~nx0 (
set "filename=%%~nf"
echo %filename%
ren "%%f" "!filename:~0,-5!%%~xf"
)
ENDLOCAL enabledelayedexpansion
goto start
我没有一种方法来识别和传递与上述模式完全匹配的文件,因为我无法找到这样一种方法(doh!)。一点也不优雅,因为我的代码会影响所有文件,但至少这是一个开始
Cheers,BF代替
FOR/R
使用FOR/F
命令,该命令解析通过管道传输到FINDSTR
命令的DIR
命令的输出。这样你就可以匹配你的模式<代码>对于/F“delims=“%%G IN('dir/a-d/b/s*.png^ findstr/R/C:*[0-9][0-9][0-9][0-9]\.png$”)执行…谢谢@Squashman。我尝试在DIR
命令和FINDSTR
中插入我的%Path%变量,可惜都没有成功。我应该把%Path%放在哪里?对于初学者来说,永远不要覆盖系统
路径变量。如果要将变量命名为路径,请使用下划线或其他名称<代码>设置“\u Path=G:\to\dir”。我不建议尝试将path变量放入DIR
命令中。在执行FOR
命令之前更改目录<代码>cd/d“%\u path%”如果您的问题得到了回答,请将其作为下面的答案发布。您可以发布自己问题的答案。那么请删除你的评论,因为评论中有那么多的代码是不可读的。再次感谢,@Squashman这么做了。我的问题现在已经完全回答了。