2017-05-03 206 views
1

我有一个文件夹中的多个文本文件,我正在搜索的内容和重命名找到的文件,但有问题。当我运行批处理时,它将所有找到的文件重命名为相同的文件名。因此,如果它发现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" 
) 
+0

之前'REN'aming你将不得不添加计数器,_probably使用'SET/A'_,然后在'EXIST'中使用'IF \ ELSE'表达式。 – Compo

+0

它不是你的问题的答案,但你应该使用'('findstr/m/L/c:“\ <%searchfor%\>”“%sourcedir%\ *。txt”')'以避免包含test1的单词,但不仅仅是test1 –

+0

@UlugToprak,当规定**'/ L' **时,正则表达式**'**和**'**>应该被看作是文字字符并且不能与预期的字符串匹配。 – Compo

回答

1

变化

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,并且应该顺利进行。

(用少量的“点击”可在副本上进行测试,以避免混淆)

相关问题