Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Скопировать файл если он отличается от оригинала (http://forum.oszone.net/showthread.php?t=183089)

GhostKU 16-08-2010 17:42 1474907

Скопировать файл если он отличается от оригинала
 
Нужно проверить существует ли файл и равен ли его CRC заданному Если нет то скопировать файл.
Есть програмка CRC32 выдающая результат в виде
полный_путь_к_файлу - CRC32: XXXXXXX
если файла нет то она выдает пустую строку

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

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

deepred 16-08-2010 18:12 1474922

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 1475316

Большое спасибо
Что такое 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 1475341

GhostKU,

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

Цитата:

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

Что Вы имеете в виду? Возможно вызов пакетника с параметрами?

Цитата:

Цитата GhostKU
Что означает конструкция %~z1 ? »

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

GhostKU 17-08-2010 11:34 1475394

В моем случае пакетник лежит на сетевой шаре и так и запускается \\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 1475434

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 1475697

Пришлось добавить в батник строку

Код:

If /i not exist %~2 Copy %~1 %~dp2 /Y
ибо если файл не существует то %~z2 возвращает пустую строку и if не отрабатывает нормально.


Время: 05:00.

Время: 05:00.
© OSzone.net 2001-