1

我有一个包含几百个文件夹的目录。每个文件夹都有一个 *.iso 文件和一个名为“Disc Art”的文件夹。Disc Art 文件夹内是一个 *.btw 文件,通常命名为 1.btw 或 01.btw。我希望能够将 .btw 的文件名更改为父文件夹中 *.iso 的文件名,并在其中添加“- Disc 01”。所以如果我有“Windflyers.iso”,我最终会得到“Windflyers - Disc 01.btw”

这是我到目前为止所尝试的。我相信我非常接近。出于某种原因,我觉得 SET 命令失败了,因为当我在下一行调用变量来重命名文件时,没有任何值。

for /D %%f in (*.*) do (    
cd "%%f"
for /F %%a in ('dir /b *.iso') do set variable=%%~na
rename "Disc Art\*.btw" "%variable% - Disc 01.btw"
cd..
)

我也尝试过有人在我的工作中建议的方法。

setlocal enabledelayedexpansion
for /D %%f in (*.*) do (    
cd "%%f"
for /F %%a in ('dir /b *.iso') do set variable=%%~na
rename "Disc Art\*.btw" "%variable% - Disc 01.btw"
cd..
) >> log.txt
endlocal

谢谢
我对下面的解决方案做了一些修改。dbenham 的解决方案有效,但如果 .iso 在文件名中包含空格,它只会给我第一个单词。我能够使用下面的 .bat 代码获得完整的文件名。

for /D %%f in (*.*) do (    
cd "%%f"
for /F "tokens=*" %%* in ('dir /b *.iso') do rename "Disc Art\*.btw" "%%~n* - Disc 01.btw"
cd..
) >> log.txt
4

1 回答 1

0

SET 正在工作,但您不能在代码块中设置值,然后使用访问同一块中的值,%variable%因为在执行任何操作之前,整个块在解析时扩展。您可以通过启用延迟扩展并改为使用!variable!来获得所需的值。但这不是必需的,因为您甚至根本不需要该变量:

for /D %%f in (*.*) do (    
  cd "%%f"
  for /F %%a in ('dir /b *.iso') do rename "Disc Art\*.btw" "%%~na - Disc 01.btw"
  cd..
) >> log.txt

有一个更简单的解决方案

(for /r %%F in (*.iso) do ren "%%~dpDisc Art\*.btw" "%%~nF - Disc 01.btw")>log.txt
于 2013-10-16T23:20:24.463 回答