Batch file 批处理文件重命名文件夹中的文件
我在一个文件夹中有多个文本文件,我正在搜索内容并重命名找到的文件,但有问题。当我运行批处理时,它将所有找到的文件重命名为相同的文件名。因此,如果它找到3个包含字符串的文件,它会将所有文件重命名为同一个文件。还是有点新鲜。我试图在所有文本文件中找到字符串“test1”,然后将找到的文件重命名为test1.txt、test1(2.txt)等Batch file 批处理文件重命名文件夹中的文件,batch-file,batch-rename,Batch File,Batch Rename,我在一个文件夹中有多个文本文件,我正在搜索内容并重命名找到的文件,但有问题。当我运行批处理时,它将所有找到的文件重命名为相同的文件名。因此,如果它找到3个包含字符串的文件,它会将所有文件重命名为同一个文件。还是有点新鲜。我试图在所有文本文件中找到字符串“test1”,然后将找到的文件重命名为test1.txt、test1(2.txt)等 @ECHO OFF @SETLOCAL enableextensions disabledelayedexpansion SET "sourcedir=C:\
@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"
)
改变
REN "%%a" "%searchfor%.txt"
到
对于每个要更改的文件名,它将首先检测%searchfor%.txt是否存在,如果不存在,则重命名目标文件。如果存在%searchfor%.txt,则将重命名
标志设置为nothing,并将%%r
=1到100的循环设置为1步。如果文件名%searchfor%(%r).txt不存在,则进行重命名并将重命名的设置为(好的-除了nothing之外的任何值都可以-%r
很方便)。由于现在定义了重命名
,如果未定义
将为false,因此不会对该目标文件名进行进一步的重命名尝试
(未经测试)
注意-语法很重要。不要试图在许多行上打断语句或改变括号的位置。只需剪切粘贴即可
提示:
不要使用ren
而使用echo ren
,它只会报告建议的重命名。显然,由于文件实际上不会被重命名,因此过程将报告相同的新名称。然后手动创建%searchfor%.txt
,然后重试。然后手动创建%searchfor%(1).txt
,然后重试。您将看到提议的新名称更改。以这种方式进行测试后,将每个echo-ren
更改为ren
,所有操作都应顺利进行
(用少量的“点击”对副本进行测试以避免混淆)在REN
命名之前,您必须添加一个计数器,可能使用SET/a
,然后使用IF\ELSE
表达式和EXIST
。这不是对您的问题的回答,但您应该使用('findstr/m/L/c:“\”“%sourcedir%\*.txt””)
避免包含test1的单词,而不仅仅是test1@UlugToprak,当规定/L
时,正则表达式\
应被视为文字字符,且与预期字符串不匹配。hi,在循环中,每个echo测试报告都可能仅正常结束,但如果从ren中裁剪出echo,则当命令文件*.txt将添加到队列中,这将增加,循环将在所有“旧”和“新”中执行“txt文件,没有结尾吗?抱歉,我的英语水平有限,希望您能理解此评论。@kaputtz首先,findstr
将从当前目录创建所需文件名的列表。/f的等待列表的生成,然后处理该列表,因此使用文件名执行重命名,就像最初一样。如果重命名文件,则由findstr
创建的列表不能包含新文件名,因为执行findstr
时新文件名不存在,因此重命名的文件将不会永久重命名。@kaputtz:但是,请注意,如果文件名称
,名称(1)
和名称(2)
存在,每个文件都包含字符串name
1<代码>名称
将被重命名为名称(3)
(因为这是第一个不存在的名称(?)
)<代码>名称(1)
将被重命名为名称
,因为名称
已不存在,然后重命名为3<代码>名称(2)
将被重命名为名称(1)
,因为名称(1)
不再存在。谢谢您的评论/回复!
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"
)