我使用的是XP Pro SP3,使用“.cmd”文件重命名一组文件。
...假设我有以下文件......
111.aaa
222.aaa
333.aaa
111.bbb
222.bbb
333.bbb
111.ccc
222.ccc
333.ccc
111.ddd
222.ddd
333.ddd
111.eee
222.eee
333.eee
...我使用以下代码重命名文件......
for %%i in (*.ddd *.aaa) do ren "%%i" "---------- %%~i"
for %%i in (*.aaa *.bbb *.ccc *.ddd *.eee) do ren "%%i" "xxxxx %%i"
......我最终得到了以下内容......
xxxxx ---------- 222.aaa
xxxxx ---------- 333.aaa
xxxxx xxxxx ---------- 111.aaa
xxxxx 222.bbb
xxxxx 333.bbb
xxxxx xxxxx 111.bbb
xxxxx 222.ccc
xxxxx 333.ccc
xxxxx xxxxx 111.ccc
xxxxx ---------- 222.ddd
xxxxx ---------- 333.ddd
xxxxx xxxxx ---------- 111.ddd
xxxxx 222.eee
xxxxx 333.eee
xxxxx xxxxx 111.eee
第一行代码找到“aaa”和“ddd”文件,并用破折号作为文件名的前缀。
第二行代码在所有文件名前面加上Xs - 然而,每组中的第一个文件第二次被处理,这既不是预期的,也不是我们想要的!
在研究时,我看到了对ENABLEDELAYEDEXPANSION,令牌或delims的引用 - 但我找不到我需要的例子来解决我的问题。
任何建议?
谢谢......
PS:这是一个真正的冒险格式化这篇文章;它不是记事本复制和粘贴友好...答案 0 :(得分:1)
for /f "delims=" %%i in ('dir /b /a-d *.ddd *.aaa') do ren "%%i" "---------- %%~i"
应该解决你的问题(以同样的方式修改你的第二行。)
似乎正在发生的事情是for %%i...
在遇到文件名时会对其进行处理,但第二档会对名称进行重新排序,因此可能会再次遇到新名称。
dir
命令在内存中构建文件名列表,然后处理列表,以便绕过更改的目录序列。
答案 1 :(得分:0)
恐怕我不明白你的问题究竟是什么。这是你的代码:
for %%i in (*.ddd *.aaa) do ren "%%i" "---------- %%~i"
for %%i in (*.aaa *.bbb *.ccc *.ddd *.eee) do ren "%%i" "xxxxx %%i"
这是您的代码/问题的描述:
第一行代码找到" aaa"和" ddd"文件和前言 带有破折号的文件名。第二行代码序列全部 带有Xs的文件名 - 然而,每个组中的第一个文件得到 第二次处理,这既不是意图也不是期望!
如果您希望不处理第二行中的* .ddd或* .aaa文件,请在第二行中使用此文件:
for %%i in (*.bbb *.ccc *.eee) do ren "%%i" "xxxxx %%i"
也许您对问题的描述不够明确?