Shell 创建批处理以基于父目录中的文件名重命名文件
我有一个包含几百个文件夹的目录。每个文件夹都有一个*.iso文件和一个名为“Disc Art”的文件夹。光盘艺术文件夹内有一个*.btw文件,通常命名为1.btw或01.btw。我希望能够在父文件夹中将.btw的文件名更改为*.iso的文件名,并将“-Disc 01”添加到其中。因此,如果我有“Windflyers.iso”,我将以“Windflyers-Disc 01.btw”结束 以下是我到目前为止所做的尝试。我相信我很接近。出于某种原因,我觉得SET命令失败了,因为当我调用下一行中的变量来重命名文件时,没有值Shell 创建批处理以基于父目录中的文件名重命名文件,shell,variables,powershell,cmd,command,Shell,Variables,Powershell,Cmd,Command,我有一个包含几百个文件夹的目录。每个文件夹都有一个*.iso文件和一个名为“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
集合正在工作,但您不能在代码块内设置值,然后使用
%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
因此,.iso
位于.btw
文件的父文件夹中?您能简化这个问题吗?听起来好像您正在尝试重命名父文件夹和子文件,这是否正确?谢谢dbenham!你的解决方案正是我想要的。您的第一个代码和简化的代码都能完美地完成预期的任务。