Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Скопировать файл если он отличается от оригинала

Ответить
Настройки темы
CMD/BAT - [решено] Скопировать файл если он отличается от оригинала

Пользователь


Сообщения: 60
Благодарности: 1


Конфигурация

Профиль | Отправить PM | Цитировать


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

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

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

Отправлено: 17:42, 16-08-2010

 

Пользователь


Сообщения: 140
Благодарности: 92

Профиль | Отправить PM | Цитировать


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 размер в байтах

Последний раз редактировалось deepred, 17-08-2010 в 10:39.

Это сообщение посчитали полезным следующие участники:

Отправлено: 18:12, 16-08-2010 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Пользователь


Сообщения: 60
Благодарности: 1

Профиль | Отправить PM | Цитировать


Большое спасибо
Что такое 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 размер в байтах
Так должно работать?

Отправлено: 10:03, 17-08-2010 | #3


Пользователь


Сообщения: 140
Благодарности: 92

Профиль | Отправить PM | Цитировать


GhostKU,

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

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

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

Отправлено: 10:37, 17-08-2010 | #4


Пользователь


Сообщения: 60
Благодарности: 1

Профиль | Отправить PM | Цитировать


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

Отправлено: 11:34, 17-08-2010 | #5


Пользователь


Сообщения: 140
Благодарности: 92

Профиль | Отправить PM | Цитировать


GhostKU,

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

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

Код: Выделить весь код
Echo on&Chcp 1251&Cs
:: SZcheck.bat
If /i %~z1 GTR %~z2 Copy %~1 %~dp2
Пример вызова:
Код: Выделить весь код
SZcheck.bat "полный_путь\файл1" "полный_путь\файл2"
Это сообщение посчитали полезным следующие участники:

Отправлено: 12:15, 17-08-2010 | #6


Пользователь


Сообщения: 60
Благодарности: 1

Профиль | Отправить PM | Цитировать


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

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

Отправлено: 17:40, 17-08-2010 | #7



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Скопировать файл если он отличается от оригинала

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Как скопировать заблокированный файл? Sp01LeR AutoIt 3 12-03-2011 14:43
Suse/OpenSuSE - Невозможно скопировать файл на диск AlhimikRu Общий по Linux 3 09-03-2010 04:55
Программе установки не удалось скопировать файл ... .:[invisible]:. Автоматическая установка Windows 2000/XP/2003 8 12-09-2009 12:42
Как скопировать данные с диска если загрузка Windows невозможна? Rudy Microsoft Windows 2000/XP 8 02-11-2006 19:02
Чем отличается клиент-сервер от файл сервера? averuga Хочу все знать 4 28-10-2004 10:38




 
Переход