【发布时间】:2024-01-13 15:34:02
【问题描述】:
我有一个包含几百个文件夹的目录。每个文件夹都有一个 *.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
【问题讨论】:
-
那么
.iso在.btw文件的父文件夹中? -
您能否简化问题,听起来您正试图重命名父文件夹和子文件,这样是否正确?
标签: shell variables powershell cmd command