1

我正在尝试为 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 (
   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] 请 frendz 告诉我该怎么做......

4

2 回答 2

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\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将在执行第一个重命名命令之前完全执行。

于 2013-10-18T06:16:23.297 回答
0

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

如果您这样做并且脚本仍然无法正常工作,我会仔细研究它。

于 2013-10-18T06:09:09.500 回答