2015-12-14 45 views
0

我有一個文件夾中的一些500 .txt文件的名稱。其中,大約100個文件包含我希望更改的文本。我已經使用下面的代碼來做到這一點。批處理腳本找到修改的文件

used Repl.bat and the below code: 
for %%F in (*.txt) do (
type "%%F"|repl Apples Mangoes >"%%F.new" 
move /y "%%F.new" "%%F" 
) 

由於此功能搜索所有文件,所以文件正在被修改。我無法知道文件在哪些文件中被替換。

我的實際任務是改變串並獲得修改的文件到另一個文件夾。 我嘗試使用下面的代碼來移動修改後的文件。但是因爲所有的文件都被修改了,所以我無能爲力。

ECHO OFF 
set source=C:\abc\ 
set destination=C:xyz\ 

for /F "tokens=2-4 delims=/ " %%i in ('date /t') do set yyyymmdd1=%%j"."%%i"."%%k 

if exist %destination% goto GO 
:GO 
mkdir %destination%%yyyymmdd1% 
xcopy %source%* %destination% /m/s/d/y/c/v/r 
echo. 
echo Finished copying %source% to %destination% 
echo. 
echo Created %destination%%yyyymmdd1% 
pause 

在此先感謝

+1

我看到兩種方法:1)首先檢查文件是否包含單詞與find命令來替換。然後或者移動文件不變或通過repl運行它。 2)爲所有文件調用repl,然後使用fc命令比較原始文件和副本 – Marged

+0

感謝您的快速響應。我是批量腳本新手,上面的代碼不是我自己的。我只從本網站上購買。請詳細說明 – nani

+1

SO不是'寫我的代碼'網站。這個想法是幫助你提出建議。你需要能夠按照給出的建議 – Marged

回答

0

要簡單地找出哪些文件實際上已經體改,相對於它們的內容只有,您可以使用下面的代碼片段,它收集的所有修改過的文件日誌文件change.log

@echo off 
> "change.log" (
    for %%F in ("*.txt") do (
     type "%%~F" | > "%%F.new" repl Apples Mangoes 
     > nul fc /L "%%~F" "%%~F.new" || echo "%%~F" 
     > nul move /Y "%%~F.new" "%%~F" 
    ) 
) 

它使用fc命令,它設置ErrorLevel0對於m的事實原始文件,並1否則。 ||構成一個條件命令分隔符,僅在非零的情況下執行下一個命令(也稱爲退出代碼或返回代碼)。

比較是在文本模式下完成的。要將其更改爲二進制模式,請將fc /L替換爲fc /B

重定向> nul避免了任何fc消息(像Comparing files [...]FC: no differences encountered)或move(如1 file(s) moved.)。如果您想在屏幕上看到sch消息,請將> nul替換爲> con

事後移動收集修改的文件,請使用以下命令行批處理腳本:

for /F "delims=" %%I in ("change.log") do (move "%%~I" "\path\to\destination\") 
相關問題