我正在尝试构建一个批处理脚本来确认文件大小和修改日期。因为我一直在使用不同的命令(差异,补偿和其他),这些命令没有给我所需的结果。这两个文件都是远程找到的,并且位于不同的时区,所以使用dir命令输出对我来说不起作用。
要求提供计算机名称或关键字以从txt文件中提取列表
set /P "ComputerName=Please enter the computer name or the word batch to pull from computernames.txt: "
比较两个地点
file1= (fixed server location)\file.zip(or txt)
file2= \\%ComputerName%\m$\file.zip(or txt)
比较修改日期(此文件每周修改一次但不能使用时间戳,因为文件发送到不同时区的计算机,如果副本有问题,则会恢复到上次成功的文件日期或&#34 ;时间的开始"时间戳)
比较大小(默认情况下复制失败的文件为卡住的0大小或大小)
if file1 = file2
end or proceed to next file in batch
if file1 does not equal file 2 (both conditions)
export %ComputerName% name to file
once confirmed end or continue next in txt list
答案 0 :(得分:0)
不确定这会在您的环境中有效,但是......当FAT分区使用本地时间来保存文件时间戳时,NTFS使用UTC时间。可以使用robocopy
@echo off
setlocal enableextensions disabledelayedexpansion
call :getFileData "%cd%\file1.zip" file1
call :getFileData "%cd%\file2.zip" file2
echo file1 : %file1%
echo file2 : %file2%
if "%file1%"=="%file2%" (
echo Both files has the same size/timestamp
) else (
echo Files has different size/timestamp
)
goto :eof
:getFileData file returnVar
rem Prepare environment
setlocal enableextensions disabledelayedexpansion
set "fileData="
rem Retrieve file size and time stamp
for /f "tokens=1-3" %%a in ('
robocopy "%~dp1\." "%~dp1\." "%~nx1" /l /is /ts /nc /ndl /njh /njs 2^>nul
') do set "fileData=%%a %%b %%c"
rem Handle non existing files
if not defined fileData set "fileData=FileNotFound %random%%random%%random%"
rem Return or show data
endlocal & if "%~2"=="" (echo(%fileData%) else (set "%~2=%fileData%")
exit /b