批处理文件重命名文件夹中的文件

时间:2017-05-03 15:05:52

标签: batch-file batch-rename

我在一个文件夹中有多个文本文件,我正在搜索内容并重命名找到的文件但有问题。当我运行批处理时,它将所有找到的文件重命名为相同的文件名。因此,如果它找到包含字符串的3个文件,则会将所有文件重命名为同一文件。这个东西还有点新鲜。我试图在所有文本文件中找到字符串“test1”,然后将找到的文件重命名为test1.txt,test1(2).txt等。

@ECHO OFF
@SETLOCAL enableextensions disabledelayedexpansion

SET "sourcedir=C:\test"
SET "searchfor=test1"
FOR /f "delims=" %%a IN ('findstr /m /L /c:"%searchfor%" "%sourcedir%\*.txt"') DO (
 REN "%%a" "%searchfor%.txt"
)

1 个答案:

答案 0 :(得分:2)

更改

 REN "%%a" "%searchfor%.txt"

 if exist "%searchfor%.txt" (
  set "renamed="
  for /L %%r in (1,1,100) do if not defined renamed if not exist "%searchfor% (%%r).txt" REN "%%a" "%searchfor% (%%r).txt"&set "renamed=%%r"

  ) else (
  REN "%%a" "%searchfor%.txt"
 )

将为每个要更改的文件名首先检测是否存在%searchfor%.txt,如果不存在,则重命名目标文件。如果%searchfor%.txt存在,则将renamed标志设置为 nothing 并循环为%%r = 1到100,步长为1.如果文件名为{{1} }不存在,然后重命名并将%searchfor% (%%r).txt设置为(嗯 - nothing 以外的任何值都可以 - renamed很方便)。由于%%r现已定义,renamed将为false,因此不会再对该目标文件名进行重命名尝试。

(未测试的)

注意 - 语法很重要。不要试图打破多行的陈述或改变括号的位置。只是剪切和粘贴。

提示:

而不是if not defined使用ren而只是报告建议的重命名。显然,由于文件实际上没有被重命名,因此该过程将报告相同的新名称。然后手动创建echo ren并重试。然后手动创建%searchfor%.txt并再试一次。您将看到建议的新名称更改。以这种方式进行测试后,将每个%searchfor% (1).txt更改为echo ren,所有内容都应顺利进行。

(对少量"点击"以避免混淆的副本进行测试)