【问题标题】:Recursively append folder name to the files in Windows batch file递归地将文件夹名称附加到 Windows 批处理文件中的文件
【发布时间】:2017-03-02 20:40:31
【问题描述】:

我想将我的文件夹名称附加到子文件夹中所有可用的 .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"

有了这个,我可以在一个目录中实现它。我不能让它递归。请问各位大神能帮我解决一下吗?

【问题讨论】:

  • 这不是dos,请去掉dos标签

标签: batch-file cmd windows-scripting


【解决方案1】:
@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(不早于已调试)。

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

【讨论】:

  • 有没有一种简单的方法来代替或附加文件夹名称?但是,当然,以保留文件扩展名的方式。
猜你喜欢
  • 2020-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多