使用内容中的查找批量重命名文件

时间:2013-11-18 18:02:02

标签: windows batch-file batch-rename

长期听众第一次来电。

我正在尝试使用Windows批处理脚本来搜索目录中包含的文件中的特定字符串,并使用文件名和随机值对它们进行分类,以便进一步处理。

这是我根据类似帖子整理的内容:

setlocal enabledelayedexpansion

for %%a in (C:\Temp\*.txt) do (

  set t1=string1-%RANDOM%.txt

  set t2=string2-%RANDOM%.txt

  find "string1" %%~fa && ren %%~fa %t1%

  find "string2" %%~fa && ren %%~fa %t2%

) 

如果我在for循环之外移动set命令它会起作用,但我需要它在循环中生成一个随机文件名,以防有多个文件找到'string1'。

任何帮助非常感谢! 感谢。

1 个答案:

答案 0 :(得分:1)

在cmd中,当引用它们的块时,变量将替换为它的值。在您的情况下,您的设置变量会被替换一次,当for表示reed,并且更改不可见,因为一旦完成替换,就不会有更多的变量替换。这就是enabledelayedexpansion的原因,但需要更改代码

setlocal enabledelayedexpansion

for %%a in (C:\Temp\*.txt) do (
  set t1=string1-!RANDOM!.txt
  set t2=string2-!RANDOM!.txt
  find "string1" "%%~fa" && ren "%%~fa" !t1!
  find "string2" "%%~fa" && ren "%%~fa" !t2!
) 

对于变量的延迟扩展,有必要向cmd指示在每次访问中应该替换哪些变量。要做到这一点,请改变%!使用变量时。对于for命令(您的%%a)中的控制变量,这不是必需的。

请注意,您的代码无法处理重复文件名的可能性。随机意味着随机,而不是唯一。碰撞是可能的。