以递归方式将文件夹名称附加到Windows批处理文件中的文件

时间:2017-03-02 20:40:32

标签: batch-file windows-scripting

我想将我的文件夹名称附加到子文件夹中的所有可用.txt文件。下面是文件/目录结构。我需要在Windows BATCH脚本中实现这一点。

  

C:\ Source \ Source1 \ 1 \ a.txt C:\ Source \ Source1 \ 1 \ b.txt

     

C:\ Source \ Source1 \ 2 \ a.txt C:\ Source \ Source1 \ 2 \ b.txt

     

C:\ Source \ Source2 \ 3 \ a.txt C:\ Source \ Source2 \ 3 \ b.txt

上述文件应重命名如下:

  

C:\ Source \ Source1 \ 1 \ 1_a.txt C:\ Source \ Source1 \ 1 \ 1_b.txt

     

C:\ Source \ Source1 \ 2 \ 2_a.txt C:\ Source \ Source1 \ 2 \ 2_b.txt

     

C:\ Source \ Source2 \ 3 \ 3_a.txt C:\ Source \ Source2 \ 3 \ 3_b.txt

同样,我有Source1 ... Source30,在每个源目录下,我将有多个不同数字的文件夹。我需要重命名这些目录下的所有文件,并将数字(目录名)附加到文件名。

到目前为止,我写的是:

for %%* in (.) do set CurrDirName=%%~nx*
echo %CurrDirName%

for /r %%x in (*.txt) do ren "%%x" "%CurrDirName%_%%x"

有了这个,我就可以在一个目录中实现它。我不能让它递归。你能帮我解决这个问题。

1 个答案:

答案 0 :(得分:0)

@echo OFF
SETLOCAL EnableExtensions
for /F "delims=" %%G in ('dir /B /S "C:\Source\*.txt"') do (
    for %%g in ("%%~dpG.") do ECHO rename "%%~fG" "%%~nxg_%%~nxG"
)
pause

FOR循环的位置:

  • %%G循环创建.txt文件的静态列表(递归),
  • inner %%g循环获取每个特定文件的父文件夹。

rename命令仅使用ECHO显示以进行调试。要使其正常运行,请删除单词ECHO(不早于调试)。

此外,我考虑检查特定文件是否已重命名...