2014-02-10 38 views
0

我的問題似乎很簡單,但到目前爲止我沒有在網上找到有效的東西。重命名文件和更改內容窗口批量

我有文件包含的0011一些OCCURENCES在她們身上的列表,somethig像

file0011.xml 
doc0011.xml 
toto0011.xml 

。 我希望在此期間:
- 用我想要的任何東西代替0011,如0012
- 在所有文件中用0012替換所有0011的出現。

因此,命令行看起來像mayBatch.bat 0011 0012

我發現有些東西可以替換多個文件中的某些文本部分,但只能用於「顯示」。 所以我想我需要
- 解析包含的文件夾中,以得到他們的名字的文件
- (?仁功能)替換其名稱中第二的一個第一個參數的出現次數
- 更換第二個參數的第一個參數文件中包含的事件。

我的問題:我不知道如何在Windows批處理中做到這一點......你能幫助我嗎?

謝謝!

+0

是否所有的文件都在一個文件夾中? – foxidrive

+0

是的,它們是批處理文件中的一個 – Derbie

回答

0
@ECHO OFF 
SETLOCAL 
SET "line=%2" 
IF NOT DEFINED line ECHO syntax %0 from to&GOTO :eof 
SET "sourcedir=c:\sourcedir" 
FOR /f "tokens=1*delims=" %%a IN ('dir /b /a-d "%sourcedir%\*%1.xml" ') DO (
CALL :process %%1 %%2 "%%a" 
) 

GOTO :EOF 

:process 
SET "file=%~3" 
CALL SET "file=%%file:%1=%2%%" 
(
FOR /f "usebackqdelims=" %%x IN ("%sourcedir%\%~3") DO (
SET "line=%%x" 
SETLOCAL ENABLEDELAYEDEXPANSION 
SET "line=!line:%~1=%~2!" 
ECHO(!line! 
endlocal 
) 
)>"%sourcedir%\%file%" 

GOTO :eof 

您的需要設置你的源目錄到明顯的地方。如果存在目標文件名,這將毫無意義地超過目標文件名,因此將使用新名稱和更改內容創建一個新文件。原始文件被保留,BT將

del "%sourcedir%\%~3" 

剛在例行:processgoto :eof之前要完成自己的目標。

(經過測試和驗證,自然是)

0

對一些示例文件進行測試。

myBatch.bat 0011 0012.

@echo off 
setlocal enabledelayedexpansion 
for /f "delims=" %%a in ('dir *.xml /b /a-d') do (
    set "name=%%~nxa" 
    ren "%%a" "!name:%1=%2!" 
)