我有几个文件夹,名称如下:
123 - 1234 - string1 - string2
并希望将它们全部重命名为
string1 - string2
使用批处理文件。
我正在寻找类似的东西:
@echo off
setlocal EnableDelayedExpansion
for /D %%f in (C:\Users\*) do (
set string=%%f
for /f "tokens=1,2,3,4 delims=-" %%a in (%%f) do (set part1=%%a)&(set part2=%%b)&(set part3=%%c)&(set part4=%%d)
set newstring=part3 - part4
rename "string" "newstring"
)
不幸的是,它不起作用,我不知道出了什么问题......你有更好的想法吗?
答案 0 :(得分:2)
您必须将变量名称括在感叹号中以使其扩展,如!part3!
中所示。这必须在您想要变量值的每个地方完成。感叹号用于FOR循环内的延迟扩展。您可以将百分比用于正常扩展,但不能在也设置值的循环中使用。
此外,您的内部FOR / F循环必须在IN()子句中使用双引号。正如当前所写,它正在尝试使用您的文件夹名称打开文件。
但在你的情况下有一种更简单的方法:
@echo off
for /d %%F in (c:\users\*-*-*-*) do for /f "tokens=2* delims=-" %%A in ("%%~nxF") do ren "%%F" "%%B"