2012-11-06 48 views
0

我有一個批處理文件,用於檢查目錄中的更新,然後將任何新文件或最近修改的文件複製到其他選定的文件目錄,但是我不確定如何檢查源目錄中是否有隻有修訂號或字母差異的兩個文件:example.pdf和exampleA.pdf。我需要通過字符串和日期修改來以某種方式比較文件。 因此,如果源目錄中有一個新文件被保存爲exampleB.pdf,我需要批處理將該文件作爲example.pdf而不是新文件名複製到目標目錄中。我希望複製的文件具有核心文件名,如果你願意,只是example.pdf批處理文件比較目錄中的相似文件名,然後複製上次修改後的文件並保存到其他目錄

任何幫助將不勝感激。下面

感謝

@Echo Off 
:: variables 
set drive=G:\Backup 
set backupcmd=xcopy /s /c /d /e /h /i /r /y 

set revchk=if 

Set _Delay=10 
Set _Monitor=C:\Users\me\Desktop\Test Source Folder 
Set _Base=%temp%\BaselineState.dir 
Set _Chck=%temp%\ChkState.dir 
Set _OS=6 
Ver|Findstr /I /C:"Version 5">Nul 
If %Errorlevel%==0 Set _OS=5 & Set /A _Delay=_Delay*1000 
:_StartMon 
Call :_SetBaseline "%_Base%" "%_Monitor%" 
:_MonLoop 
If %_OS%==5 (Ping 1.0.0.0 -n 1 -w %_Delay%>Nul) Else Timeout %_Delay%>Nul 
Call :_SetBaseline "%_Chck%" "%_Monitor%" 
FC /A /L "%_Base%" "%_Chck%">Nul 
If %ErrorLevel%==0 Goto _MonLoop 

echo ### Backing up... 
%backupcmd% "C:\Users\me\Desktop\Test Source Folder" "C:\Users\me\Desktop\Test Destination Folder" 


echo ### Checking for new file revisions... 



Echo.Backup Complete! 
Goto :_StartMon 
::::::::::::::::::::::::::::::::::::::::::::::::::: 
:: Subroutine 
::::::::::::::::::::::::::::::::::::::::::::::::::: 
:_SetBaseline 
If Exist "%temp%\tempfmstate.dir" Del "%temp%\tempfmstate.dir" 
For /F "Tokens=* Delims=" %%I In ('Dir /S "%~2"') Do (
Set _Last=%%I 
>>"%temp%\tempfmstate.dir" Echo.%%I 
) 
>"%~1" Findstr /V /C:"%_Last%" "%temp%\tempfmstate.dir" 
Goto :EOF 

回答

2

批處理程序假定較新的文件有版本號或字母升序alphabeticall順序,因此最後列出的文件是最新的一個。這樣,程序就會識別一組以相同名稱開頭的文件,並將該組中的最後一個與該組中第一個的名稱複製。

@echo off 
setlocal EnableDelayedExpansion 
set baseName= 
for %%a in (*.*) do (
    if not defined baseName (
     rem Is first name of first set 
     set baseName=%%~Na 
     set baseExt=%%~Xa 
     set lastName=%%~Na 
    ) else (
     rem Check if this name begin with same baseName 
     set name=%%~Na 
     for %%b in (!baseName!) do set name=!name:*%%b=! 
     if "!name!" neq "%%~Na" (
     rem Yes: Is next name of same set 
     set lastName=%%~Na 
    ) else (
     rem No: Is first name of next set: copy previous set and pass to next one 
     ECHO copy "!lastName!!baseExt!" "C:\dest\dir\!baseName!!baseExt!" 
     set baseName=%%~Na 
     set baseExt=%%~Xa 
     set lastName=%%~Na 
    ) 
    )  
) 
rem Copy last set 
ECHO copy "!lastName!!baseExt!" "C:\dest\dir\!baseName!!baseExt!" 

測試程序並刪除ECHO命令,如果它按照您的要求工作。

+0

謝謝,我會測試它並讓你知道。我感謝你的迴應。 – cheapkid1

+0

我不需要在這裏的源代碼目錄,我只看到一個目錄目錄? – cheapkid1

+0

我無法讓它工作,它運行,但不會將最新的文件rev從源文件夾複製到目標文件夾,甚至不會複製原始文件。有什麼建議麼? – cheapkid1

相關問題