2017-05-03 202 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,並且應該順利進行。

(用少量的「點擊」可在副本上進行測試,以避免混淆)

相關問題