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

Recursively append folder name to the files in Windows batch file

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

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

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

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

以上文件应重命名如下:

C:\Source\Source1_a.txt C:\Source\Source1_b.txt

C:\Source\Source1_a.txt C:\Source\Source1_b.txt

C:\Source\Source2_a.txt C:\Source\Source2_b.txt

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

下面是我写的:

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

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

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

@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 个文件(递归),并且
  • 内部 %%g 循环获取每个特定文件的父文件夹。

rename 命令仅使用 ECHO 显示,用于调试目的。要使其可操作,请删除单词 ECHO(刚调试完)。

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