我编写了一个简单的批处理脚本来遍历特定目录中的文件并在文件名前添加一些文本(客户端名称)。该脚本运行良好;但是,目录中最近修改的文件似乎被修改了两次。我尝试了两种方法来解决这个问题——对目录使用 pushd 并在 for 循环中列出完整路径(下面每个的代码)。
这两种方法我最终得到的结果如下(假设第三个文件是最近修改的文件):
原始文件名:
SomeFile1.rtf
SomeFile2.rtf
SomeFile3.rtf
重命名的文件名:
TextToPrepend_SomeFile1.rtf
TextToPrepend_SomeFile1.rtf
TextToPrepend_TextToPrepend_SomeFile1.rtf
不,这不是第三个文件的拼写错误。它得到第二次处理,TextToPrepend 被第二次添加。我是 Windows 批处理脚本的新手,我曾尝试研究这个问题,但找不到这样做的原因。感谢任何帮助。
代码:
pushd C:\Images\Data\
rem setlocal ENABLEDELAYEDEXPANSION
for %%X in (*.rtf) do (
ren "%%X" TEXTTOPREPEND_"%%X"
)
popd
-- 和--
rem setlocal ENABLEDELAYEDEXPANSION
for %%X in (C:\Images\Data\\*.rtf) do (
ren "%%X" TEXTTOPREPEND_"%%~nX".rtf
)
如果有帮助,批处理脚本正在 Windows Server 2008 机器上执行。
最佳答案
您显然错误地假设 glob 在循环开始之前已展开。我知道它在 DOS 中没有。解决方案:
for %%X in (*.rtf) do (
ren "%%X" "TEXTTOAPPEND_%%~nX._rtf"
)
ren *._rtf *.rtf
或
md tmp
for %%X in (*.rtf) do (
move "%%X" "TEXTTOAPPEND_%%~nX.rtf"
)
move tmp\* .
rd tmp
目前不在我的 Windows 机器上,所以无法测试我是否可以复制您的行为。
关于batch-file - 在 Windows 批处理文件中多次处理文件...循环。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5570285/