Cmd 基于另一个文件名重命名文件名的shell脚本
我的文件夹中有2个文件。一个是“testone.txt”,另一个是“learnew.vcd”。 我需要创建一个批处理脚本,使用*.vcd重命名*.txt。 因此,批处理脚本应该将“testone.txt文件”重命名为“learnew.txt” 我的文件夹C:\DEV文件夹中只有一个txt文件和一个vcd扩展名文件 我尝试使用以下脚本,但它没有获取vcd扩展的全名,并删除空格后的所有内容-因此我只获得LEARN.txt:(Cmd 基于另一个文件名重命名文件名的shell脚本,cmd,rename,Cmd,Rename,我的文件夹中有2个文件。一个是“testone.txt”,另一个是“learnew.vcd”。 我需要创建一个批处理脚本,使用*.vcd重命名*.txt。 因此,批处理脚本应该将“testone.txt文件”重命名为“learnew.txt” 我的文件夹C:\DEV文件夹中只有一个txt文件和一个vcd扩展名文件 我尝试使用以下脚本,但它没有获取vcd扩展的全名,并删除空格后的所有内容-因此我只获得LEARN.txt:( 谢谢-db看来/F的中的默认值可能是只接受一(1)个令牌。您可以使用令牌=
谢谢-db看来/F的
中的默认值可能是只接受一(1)个令牌。您可以使用令牌=*
强制它接受所有令牌。引用很重要
@echo ON
CD "sub"
setlocal enabledelayedexpansion
for /F "usebackq tokens=*" %%A in (`dir /b *.vcd`) do (
set xname=%%~nA
ren "*.txt" "!xname!.txt"
)
为了防止有人像我一样偶然发现这一点,我被迫设计了一个更优雅的解决方案,因为我希望它能够遍历多个子目录,而不是一次运行一个目录。它是:
forfiles/S/M*.vcd/C“cmd/C rename*.txt@fname.txt”
使用您选择的文件扩展名。您甚至不需要延迟扩展和变量:ren“*.txt”“%%~nA.txt”
@echo ON
CD "sub"
setlocal enabledelayedexpansion
for /F "usebackq tokens=*" %%A in (`dir /b *.vcd`) do (
set xname=%%~nA
ren "*.txt" "!xname!.txt"
)