2015-03-03 75 views
0

我有大約100個.xml文件,但其文件名不是自解釋的。因此,我想尋找一個特定的詞,並用這個詞擴展尊重文件。 感謝一些其他有用的條目,我可以部分解決如何做到這一點,但不知何故文件不會重命名。批處理:查找具有特定內容的文件並擴展現有名稱

有沒有人知道我的代碼有什麼問題?先謝謝你。

chcp 1252 
SET sourcedir=P:\path 
FOR /f "tokens=1 delims=." %%a IN ('findstr /c:"3256" "%sourcedir%\*.xml"') DO ( 
ECHO (REN "%%a.xml" "%%a_3256.xml") 
) 
pause 
+0

似乎'FINDSTR'命令將':'附加到結果,並且migth會導致問題。我一直在查找方法來替換或刪除字符串在DOS中的字符串,但迄今沒有發現任何有用的。 – user4317867 2015-03-03 07:39:44

回答

0
chcp 1252 
SET "sourcedir=P:\path" 
FOR /f "delims=" %%a IN ('findstr /m /c:"3256" "%sourcedir%\*.xml"') DO ( 
    ECHO REN "%%a" "%%~na_3256%%~xa" 
) 
pause 

在你的代碼使用%%a兩個參數ren命令,但第二個參數必須只包含的名稱和擴展名,沒有路徑。你可以解決它使用%%~na,也就是文件名(不含路徑或擴展名)通過%%a被引用的文件(%%~xa是擴展)

此外,如果字符串被發現一次以上任意文件,您的代碼將嘗試重命名文件兩次(或更多)。最好使用findstr中的/m開關來檢索文件列表。

重命名操作僅迴應到控制檯。如果輸出正確,請刪除echo命令。

+0

謝謝你們倆(也@ user4317867)。 – 2015-03-03 12:04:58

+0

我明白你的意思,並試圖相應地更改我的代碼。但是,我無法在我的文件夾中找到重命名的文件。由於它重命名文件,不應該在同一個文件夾中完成嗎? 我的新代碼看起來完全像MC ND代碼。 CHCP 1252 SET sourcedir = P:\路徑 FOR/F %%一個IN( 'FINDSTR/M/C: 「3256」, 「%sourcedir%\ * XML」')DO( ECHO %%一個 ECHO REN「%% a」「%%〜na_3256 %%〜xa」 ) pause 今晚我得再試一次。希望很快找到解決方案/解釋。 – 2015-03-03 12:07:12

+0

@an_ja,我的錯,我忘了在答案中加入最後一行。現在更新。刪除'ren'命令前綴的'echo'命令。 – 2015-03-03 12:19:24

0

蕩它MC ND,之後我做了一些怪人腳本,來了:

試錯與這個偉大的網站一起後,我設法想出(給予信貸DOS Batch : remove characters from string in a FOR loop

@ECHO OFF 
set pathd=C:\SomePathHere 
setlocal enabledelayedexpansion 
for /f %%a in ('findstr /ic:SearchString %pathd%\*.xml') do (
set str=%%a 
set str=!str:^:=! 
echo !str! 
)