我有一个批处理文件,该文件将检查目录中的更新,然后将任何新文件或最近修改的文件复制到其他选定的目录,但是我不确定如何检查源目录说两个只有修订号或字母差异的文件:示例。我需要通过字符串和日期修改以某种方式比较文件。因此,如果源目录具有已保存为示例b.pdf的新文件,则我需要批次将该文件复制到目标目录中作为示例.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:UsersmeDesktopTest 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:UsersmeDesktopTest Source Folder" "C:UsersmeDesktopTest 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
下面的批处理程序假设较新的文件具有升序字母顺序的修订号或字母,因此最后一个列出的文件是最新的文件。这样,程序识别一组以相同名称开头的文件,并复制了集合中第一个名称的最后一个文件。
@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:destdir!baseName!!baseExt!"
set baseName=%%~Na
set baseExt=%%~Xa
set lastName=%%~Na
)
)
)
rem Copy last set
ECHO copy "!lastName!!baseExt!" "C:destdir!baseName!!baseExt!"
测试程序并删除echo命令,如果它按照您需要工作。