2015-04-11 2 views
0

Я пытаюсь создать пакетный скрипт для подтверждения размера файла и измененной даты. поскольку я использовал разные команды (diff, comp и другие), которые не дают мне необходимого результата. оба файла находятся удаленно и находятся в разных часовых поясах, поэтому использование вывода dir-команды не работает для меня.сравнение размера файла и измененной даты

попросить имя компьютера или keywork вытащить список из текстового файла

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) 

сравнить дата изменения (этот файл был изменен один раз в неделю, но не может использовать время штамп, так как файл выходит на компьютеры в разных часовых поясах, и если у копии есть проблема, она возвращается к последней успешной дате файла или отметке времени «начала времени»)

сравнить размер (файлы, которые не копию с умолчанию к 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

Не совсем уверен, что это будет работать в вашей среде, но ... в то время как разделы 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 
+0

Я немного изменил его, но все еще не получил нужный результат. –

+0

@Testdummy, и где разница? каковы значения, полученные кодом? как они отличаются от ожидаемого поведения? .... –

+0

Я добавил новый код ниже, но тест, который я запускал, не выводил ошибку или каких-либо ролей, хотя я убедился, что оба они содержат два разных файла: –

Смежные вопросы