批处理文件重命名文件夹中的文件
问题描述:
我有一个文件夹中的多个文本文件,我正在搜索的内容和重命名找到的文件,但有问题。当我运行批处理时,它将所有找到的文件重命名为相同的文件名。因此,如果它发现3个文件中包含字符串,则将它们全部重命名为相同的文件。还有点新东西这个东西。我试图找到字符串 “测试1” 中的所有文本文件中,然后重命名发现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"
)
答
变化
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
标志设置为没有任何内容并且循环为%%r
= 1到100,步长为1.如果文件名%searchfor% (%%r).txt
不存在,则重命名并将renamed
设置为(好 - 任意除以外的任何值都不会 - %%r
很方便)。由于现在定义了renamed
,所以if not defined
将为false,因此不会为该目标文件名进行进一步的重命名尝试。
(未测试)
注 - 语法很重要。不要试图打破多行的陈述或改变括号的位置。只需剪切和粘贴即可。
提示:
代替ren
使用echo ren
这将只是简单地报告所提出的重命名。显然,由于该文件实际上不会被重命名,程序会报告相同的新名称。然后手动创建%searchfor%.txt
并重试。然后手动创建%searchfor% (1).txt
并再次尝试。您会看到提议的新名称更改。以这种方式进行测试后,将每个echo ren
更改为ren
,并且应该顺利进行。
(用少量的“点击”可在副本上进行测试,以避免混淆)
之前'REN'aming你将不得不添加计数器,_probably使用'SET/A'_,然后在'EXIST'中使用'IF \ ELSE'表达式。 – Compo
它不是你的问题的答案,但你应该使用'('findstr/m/L/c:“\ ”“%sourcedir%\ *。txt”')'以避免包含test1的单词,但不仅仅是test1 –
@UlugToprak,当规定**'/ L' **时,正则表达式**'**和**'**>应该被看作是文字字符并且不能与预期的字符串匹配。 – Compo