如何在for循环中的所有子文件夹中搜索特定文件名

时间:2018-04-10 16:18:01

标签: batch-file for-loop

我有以下脚本根据文件opac_one-hit.log中的列表重命名目录中的文件

@ECHO OFF
    SETLOCAL enabledelayedexpansion
    FOR /F "tokens=1,3 delims=;" %%G IN ( opac_one-hit.log) DO (
    ren %%G %%H
    )
    pause

为了启动我的脚本应该位于opac_one-hit.log所在的同一目录中。如何在我的for循环中构建搜索功能,以便在子文件夹中找到opac_one-hit.log,而不是每次都将脚本复制到该子文件夹。

2 个答案:

答案 0 :(得分:1)

未经测试:

@ECHO OFF
    SETLOCAL enabledelayedexpansion
    for /r %%# in ("opac_one-hit*.log") do (
      FOR /F "usebackq tokens=1,3 delims=;" %%G IN ( "%%~f#" ) DO (
        ren %%G %%H
      )
    )
    pause

答案 1 :(得分:1)

您可以获取文件所在的文件夹:

for /f %%A in ('dir /s /b "c:\basedir\opac_one-hit.log"') do echo %%~dpA

其中basedir是开始递归搜索的位置(以避免搜索整个磁盘)。

如果您确定,只有一个文件,请设置变量而不是echo或使用以下版本。还可以使用以下内容来处理找到的每个 opac_one-hit.log

@ECHO OFF
SETLOCAL 
for /f "delims=" %%A in ('dir /s /b "c:\basedir\opac_one-hit.log"') do  (
  FOR /F "usebackq tokens=1,3 delims=;" %%G IN ("%%A") DO (
    echo ren "%%G" "%%H"
  )
)
pause

当重命名命令正确时,REM删除echo