使用批处理文件为特定文件添加前缀时,由于括号'[]',它为第一个文件添加前缀两次

时间:2013-10-18 04:31:34

标签: batch-file prefix batch-rename

我正在尝试为cur目录和子目录中的所有文件添加前缀,并且我使用以下代码成功:

@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] 请弗兰兹告诉我该怎么做....

2 个答案:

答案 0 :(得分:1)

问题是,重命名的文件可以再次找到并重命名。

在代码中添加ECHO rename "%%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 \支架[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将在执行第一个重命名命令之前完成执行。

答案 1 :(得分:0)

我不知道,但我会猜一猜。我有理由相信这是一个很好的猜测。删除括号(())括号并将命令放在一行上。

如果你这样做并且剧本仍然不起作用,我会密切关注它。