比较文件大小和修改日期

时间:2015-04-11 02:14:14

标签: windows batch-file cmd

我正在尝试构建一个批处理脚本来确认文件大小和修改日期。因为我一直在使用不同的命令(差异,补偿和其他),这些命令没有给我所需的结果。这两个文件都是远程找到的,并且位于不同的时区,所以使用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

1 个答案:

答案 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