2014-03-06 98 views
0

我正在嘗試編寫批處理文件來查找和替換文件夾中多個文件中的字符串。但我得到這個錯誤:使用windows查找並替換文件夾內的多個文件中的字符串批處理腳本

Cannot perform a cyclic copy

任何想法爲什麼會發生?

@echo off 
SETLOCAL 
for %%* in (.) do set foldername=%%~n* 
SET stringtofindreplace=XXXX 
for %%f in (*.fmw) do (
    echo Processing %%f... 
    fOR /F "delims=" %%l IN (%%f) DO (
     SET "line=%%l" 
     SETLOCAL ENABLEDELAYEDEXPANSION 
     set "x=!line:%stringtofindreplace%=%foldername%!" 
     echo(!x! 
     ENDLOCAL) 
    )>%%~nf.new 
) 
GOTO:EOF 

回答

0
@ECHO OFF 
SETLOCAL 

:: no idea what this is aimed at doing...?? 

for %%* in (.) do set new=%%~n* 
SET new=newstring 
SET old=XXXX 
for %%f in (*.fmw) do (
    echo Processing %%f... 
    (
    FOR /F "delims=" %%l IN (%%f) DO (
     SET "line=%%l" 
     SETLOCAL ENABLEDELAYEDEXPANSION 
     set "x=!line:%old%=%new%!" 
     ECHO(!x! 
    ENDLOCAL 
    ) 
    )>%%~nf.new 
) 
GOTO :EOF 

我不知道你正在嘗試與第一for做的,所以我只是做了一個明顯的替換字符串。

您需要添加"delims="選項才能將整條生產線交付到%%l

確保沒有對ECHO(!x!

這沒有尾隨空格將創建一個名爲新文件*。新的從每個* .FMW文件。

+0

我感謝你的幫助。第一個'for'給出了當前目錄的名稱,我可以用它來代替「XXXX」。這是偉大的工作,但它應該從每個編輯的* .fmw文件中創建一個名爲* .fmw的新文件。 – user1879324

+0

魔術變量'%cd%'會給你當前目錄的名字。批量無法就地更新;必須使用冗餘內容創建新文件。所創建的'* .new'文件可以很容易地進行比較。如果你確認處理是正確的,那麼一行就像(* .new)中的%% f一樣移動/ y「%% f」「%%〜nf.fmw」'應該移動新文件老人。 – Magoo

+0

'%CD%'爲我提供了完整的路徑,我只需要directory.as的名稱。如您所示,我使用另一個批處理文件將新文件移到old.thank上 – user1879324

0

Cannot perform a cyclic copy當源文件夾包含目標文件夾時會發生錯誤,因此會嘗試複製所有文件(包括已複製的文件)。

這會給你那個錯誤。

xcopy c:\apple\*.* c:\apple\backup\ /s 
相關問題