Показать полную графическую версию : [решено] Скопировать файл если он отличается от оригинала
Нужно проверить существует ли файл и равен ли его CRC заданному Если нет то скопировать файл.
Есть програмка CRC32 выдающая результат в виде
полный_путь_к_файлу - CRC32: XXXXXXX
если файла нет то она выдает пустую строку
Как засунуть это условие в IF?
PS Вместо CRC можно использовать просто размер файла.
GhostKU,
Самый простой способ (надо еще посмотреть на отработку 32бит точности)...
Echo on&Chcp 1251&CLS
Set ORG="F:\rad45782.txt" & Set Chk="F:\!!!HTC Wildfire.txt"
Set DST="F:\Новая папка"
call :Checking %ORG% %Chk%
pause&goto :EOF
:Checking
If /i %~z1 GTR %~z2 Copy %ORG% %DST%
rem вместо Chk можно использовать эталонное число...
rem тогда вместо %~z2 будет %Chk%
rem размер в байтах
Большое спасибо
Что такое Cs в первой строке? На нем "прерывается" выполнение.
Что означает конструкция %~z1 ?
Как изменить Ваш скрипт чтобы ORG и DEST тоже передавались как параметры подпрограммы?
Echo on&Chcp 1251&Cs
Set ORG="F:\rad45782.txt" & Set Chk="F:\!!!HTC Wildfire.txt"
Set DST="F:\Новая папка"
call :Checking %ORG% %Chk% %DST%
pause&goto :EOF
:Checking
If /i %~z1 GTR %~z2 Copy %ORG% %DST%
rem вместо Chk можно использовать эталонное число...
rem тогда вместо %~z2 будет %Chk%
rem размер в байтах
Так должно работать?
GhostKU,
Cs - это опечатка, должно быть CLS.
Как изменить Ваш скрипт чтобы ORG и DEST тоже передавались как параметры подпрограммы? »
Что Вы имеете в виду? Возможно вызов пакетника с параметрами?
Что означает конструкция %~z1 ? »
Это параметр вызова (через call) функции обработки, который содержит в себе только размер файла, смотрите cmd > For /?
Ваше изменение не играет ни какой роли...
В моем случае пакетник лежит на сетевой шаре и так и запускается \\server\share\file.cmd
Поэтому (в может и не поэтому) конструкция %~z1 не работает - пишет ошибка синтаксиса.
Так как нужно проверять несколько файлов то хотелось бы "вызов пакетника с параметрами"
На данный момент у мну получилость так:
SET CFVCRC=31232
SET CFVORG=%AUXTOOLSD%\cmdow.exe
SET CFVRES=%SYSTEMROOT%\System32\cmdow.exe
CALL :CheckFileVersion %CFVCRC% %CFVORG% %CFVRES%
SET CFVCRC=10000
SET CFVORG=%AUXTOOLSD%\file.exe
SET CFVRES=%SYSTEMROOT%\System32\file.exe
CALL :CheckFileVersion %CFVCRC% %CFVORG% %CFVRES%
:CheckFileVersion
%AUXTOOLSD%\sizeof.exe /r %CFVRES%
if ERRORLEVEL %CFVCRC% goto :EOF
Copy %CFVORG% %CFVRES%
sizeof.exe /r возвращает размер файла в видео кода ошибки.
PS В процессе решения данной проблемы возникла другая (может оно конечно не связано)
Но теперь в скрипте перестала работать консртукция echo. (вывод пустой строки) - ругается мол "echo." Не является внутренней или внешней командой.
GhostKU,
Код приведенный Вами мне абсолютно не понятен...
Для вызова с параметрами:
Echo on&Chcp 1251&Cs
:: SZcheck.bat
If /i %~z1 GTR %~z2 Copy %~1 %~dp2
Пример вызова:
SZcheck.bat "полный_путь\файл1" "полный_путь\файл2"
Пришлось добавить в батник строку
If /i not exist %~2 Copy %~1 %~dp2 /Y
ибо если файл не существует то %~z2 возвращает пустую строку и if не отрабатывает нормально.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.