Batch file 在使用批处理文件为指定文件添加前缀时,由于括号';的缘故,它为第一个文件添加了两次前缀;[]和#x27;
我正在尝试向cur dir和sub dir中的所有文件添加前缀,并使用以下代码成功地完成了此操作:Batch file 在使用批处理文件为指定文件添加前缀时,由于括号';的缘故,它为第一个文件添加了两次前缀;[]和#x27;,batch-file,prefix,batch-rename,Batch File,Prefix,Batch Rename,我正在尝试向cur dir和sub dir中的所有文件添加前缀,并使用以下代码成功地完成了此操作: @echo off pushd "D:\z.Temp\Test\" for /r %%j in (*) do ( rename "%%j" "[nilesh.uk.to]-%%~nxj" ) popd 但当我尝试为特定的文件类型添加前缀时,例如: @echo off pushd "D:\z.Temp\Test\" for /r %%j in (*.html *.js) do ( re
@echo off
pushd "D:\z.Temp\Test\"
for /r %%j in (*) do (
rename "%%j" "[nilesh.uk.to]-%%~nxj"
)
popd
但当我尝试为特定的文件类型添加前缀时,例如:
@echo off
pushd "D:\z.Temp\Test\"
for /r %%j in (*.html *.js) do (
rename "%%j" "[nilesh.uk.to]-%%~nxj"
)
popd
它工作,但它给我的输出,如:
demo1.html --> [nilesh.uk.to]-[nilesh.uk.to]-demo1.html
demo2.html --> [nilesh.uk.to]-demo2.html
demo3.html --> [nilesh.uk.to]-demo3.html
demo1.js --> [nilesh.uk.to]-[nilesh.uk.to]-demo1.js
demo2.js --> [nilesh.uk.to]-demo2.js
demo3.js --> [nilesh.uk.to]-demo3.js
这里每个第一个文件添加两次前缀
如果我将[]从nilesh.uk.to中删除,那么它可以完美地工作,但我希望前缀为[nilesh.uk.to]
请告诉我该怎么办……我不知道,但我会猜一猜。我有理由相信这是一个很好的猜测。删除括号(())括号并将命令放在一行上
如果你这样做了,但脚本仍然不起作用,我会仔细查看。我不知道,但我会猜一猜。我有理由相信这是一个很好的猜测。删除括号(())括号并将命令放在一行上
如果您这样做了,脚本仍然无法运行,我将仔细查看。问题是,可以找到重命名的文件并再次重命名 在代码中添加一个
ECHO重命名“%%j”“[nilesh.uk.to]-%%~nxj”
,您将看到如下内容
重命名“C:\temp\bracket\demo1.txt”[nilesh.uk.to]-demo1.txt“重命名”
“C:\temp\bracket\demo2.txt”“[nilesh.uk.to]-demo2.txt”重命名
“C:\temp\bracket\demo3.txt”“[nilesh.uk.to]-demo3.txt”重命名
“C:\temp\bracket[nilesh.uk.to]-demo1.txt”
“[nilesh.uk.to]-[nilesh.uk.to]-demo1.txt”
因此,您需要强制FOR
循环只获取每个文件一次
你可以把它改成
for /F "delims=" %%j in ('dir /s /b *.html') do (
....
这是可行的,因为在执行第一个重命名命令之前,
dir/s/b*.html将被完全执行。问题是,可以找到重命名的文件并再次重命名
在代码中添加一个ECHO重命名“%%j”“[nilesh.uk.to]-%%~nxj”
,您将看到如下内容
重命名“C:\temp\bracket\demo1.txt”[nilesh.uk.to]-demo1.txt“重命名”
“C:\temp\bracket\demo2.txt”“[nilesh.uk.to]-demo2.txt”重命名
“C:\temp\bracket\demo3.txt”“[nilesh.uk.to]-demo3.txt”重命名
“C:\temp\bracket[nilesh.uk.to]-demo1.txt”
“[nilesh.uk.to]-[nilesh.uk.to]-demo1.txt”
因此,您需要强制FOR
循环只获取每个文件一次
你可以把它改成
for /F "delims=" %%j in ('dir /s /b *.html') do (
....
这是可行的,因为在执行第一个重命名命令之前,dir/s/b*.html
将被完全执行。如果不测试它,我可以说()
不是问题,如果不测试它,我可以说()
不是问题