Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file CMD递归地批量重命名与模式匹配的文件_Batch File_Cmd_Batch Rename - Fatal编程技术网

Batch file 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

这是我在这里的第一个问题,请原谅我的无知,以防我错过了最佳实践。我已经查看了以前对类似任务的请求,但无法将它们的解决方案应用于下面描述的情况

这是一个CMD批处理脚本,用于仅重命名目录及其子目录中的某些文件。所有文件共享相同的模式:
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这么做了。我的问题现在已经完全回答了。