我在一个文件夹中有多个文本文件,我正在搜索内容并重命名找到的文件但有问题。当我运行批处理时,它将所有找到的文件重命名为相同的文件名。因此,如果它找到包含字符串的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"
)
答案 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
,所有内容都应顺利进行。
(对少量"点击"以避免混淆的副本进行测试)