PDA

Показать полную графическую версию : [решено] Скопировать файл если он отличается от оригинала


GhostKU
16-08-2010, 17:42
Нужно проверить существует ли файл и равен ли его CRC заданному Если нет то скопировать файл.
Есть програмка CRC32 выдающая результат в виде
полный_путь_к_файлу - CRC32: XXXXXXX
если файла нет то она выдает пустую строку

Как засунуть это условие в IF?

PS Вместо CRC можно использовать просто размер файла.

deepred
16-08-2010, 18:12
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 размер в байтах

GhostKU
17-08-2010, 10:03
Большое спасибо
Что такое 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 размер в байтах

Так должно работать?

deepred
17-08-2010, 10:37
GhostKU,

Cs - это опечатка, должно быть CLS.

Как изменить Ваш скрипт чтобы ORG и DEST тоже передавались как параметры подпрограммы? »
Что Вы имеете в виду? Возможно вызов пакетника с параметрами?

Что означает конструкция %~z1 ? »
Это параметр вызова (через call) функции обработки, который содержит в себе только размер файла, смотрите cmd > For /?
Ваше изменение не играет ни какой роли...

GhostKU
17-08-2010, 11:34
В моем случае пакетник лежит на сетевой шаре и так и запускается \\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." Не является внутренней или внешней командой.

deepred
17-08-2010, 12:15
GhostKU,

Код приведенный Вами мне абсолютно не понятен...

Для вызова с параметрами:

Echo on&Chcp 1251&Cs
:: SZcheck.bat
If /i %~z1 GTR %~z2 Copy %~1 %~dp2

Пример вызова:
SZcheck.bat "полный_путь\файл1" "полный_путь\файл2"

GhostKU
17-08-2010, 17:40
Пришлось добавить в батник строку

If /i not exist %~2 Copy %~1 %~dp2 /Y

ибо если файл не существует то %~z2 возвращает пустую строку и if не отрабатывает нормально.




© OSzone.net 2001-2012