我有在所有文件中搜索和比较的初始代码:SET FILE1 = Directory1 \ *SET FILE2 = Directory2 \ *FOR %% i IN(%FILE1%)DO SET DATE1 = %% ~tiFOR %% i IN(%FILE2%)DO SET DATE2 = %% ~ti如果“%……
使用LastWriteTime进行比较的PowerShell解决方案。
$Dir1 = 'X:\Directory1\' $Dir2 = 'X:\Directory2\' ForEach ($File1 in (Get-ChildItem -Path $Dir1 -File | Where-Object Name -match "^(INV|SLS)")){ $File2 = Join-Path $Dir2 $File1.Name If (Test-Path $File2 -NewerThan $File1.LastWriteTime){ "File {0} is newer {1} in {2}" -f $File1.Name,(Get-Item $File2).LastWriteTime,$Dir2 } else { "File {0} is newer {1} in {2}" -f $File1.Name,$File1.LastWriteTime,$Dir1 } }
示例输出(使用我的语言环境日期时间格式yyyy-MM-dd HH:mm:ss):
File INVF021 is newer 2019-03-19 00:00:00 in X:\Directory2\ File INVF032 is newer 2019-03-19 00:00:00 in X:\Directory2\ File SLS0234 is newer 2019-03-19 00:00:00 in X:\Directory2\ File SLS3211 is newer 2019-03-19 00:00:00 in X:\Directory2\
您的意图并不十分清楚,特别是因为您所需的输出不明确,因为它不包含文件的父目录。
无论如何,这是一个完成你想要的脚本(至少对我的理解),因为只有两个目录中存在的文件才能被处理。
所以这是代码,包含几个解释 rem -remarks:
rem
@echo off setlocal EnableExtensions DisableDelayedExpansion rem // Define constants here: set "_ROOT=%~dp0." & rem // (common root directory; `%~dp0.` is script's parent, `.` is current) set "_DIR1=%_ROOT%\Directory1" & rem // (1st directory containing files) set "_DIR2=%_ROOT%\Directory2" & rem // (2nd directory containing files) set _MASKS="INV*." "SLS*." & rem // (list of quoted file masks) set "_TMP1=%TEMP%\%~n0_1_%RANDOM%.tmp" & rem // (1st temporary file) set "_TMP2=%TEMP%\%~n0_2_%RANDOM%.tmp" & rem // (2nd temporary file) rem // Resolve 1st directory to be an absolute path: for %%E in ("%_DIR1%") do set "RDIR1=%%~fE" rem // Resolve 2nd directory to be an absolute path: for %%E in ("%_DIR2%") do set "RDIR2=%%~fE" rem // Write all matching files in 1st directory to 1st temporary file: pushd "%RDIR1%" && ( for %%F in (%_MASKS%) do ( echo(%%~nxF ) popd ) > "%_TMP1%" rem // Write all matching files in 2nd directory to 2nd temporary file: pushd "%RDIR2%" && ( for %%F in (%_MASKS%) do ( echo(%%~nxF ) popd ) > "%_TMP2%" rem // Loop over all common files from both temporary files: for /F %%L in ('findstr /L /I /X /G:"%_TMP1%" "%_TMP2%"') do ( rem // Build absolute `wmic`-compatible file paths: set "FILE1=%RDIR1:\=\\%\\%%L" & set "FILE2=%RDIR2:\=\\%\\%%L" setlocal EnableDelayedExpansion rem set "FILE1=%!FILE1:&=&!" & set "FILE2=%!FILE2:&=&!" rem // Get standardised file date/time (last modification) of 1st file by `wmic`: for /F %%K in ('wmic DataFile where "Name='!FILE1!'" get LastModified') do set "DATE1=%%K" rem // Get standardised file date/time (last modification) of 2nd file by `wmic`: for /F %%K in ('wmic DataFile where "Name='!FILE2!'" get LastModified') do set "DATE2=%%K" rem // Compare file dates/times (last mod.) of both files and return differing ones: if !DATE1! leq !DATE2! echo "!FILE1:\\=\!" is older than "!FILE2:\\=\!" if !DATE1! gtr !DATE2! echo "!FILE1:\\=\!" is newer than "!FILE2:\\=\!" endlocal ) rem // Clean up temporary files: del "%_TMP1%" "%_TMP2%" endlocal exit /B
核心命令是:
findstr
wmic
YYYYMMDDhhmmss.uuuuuu+ZZZ