CMD/BAT - [решено] Проверка выполнения xcopy

Ответить
Аватара пользователя
Sat_Kelman

CMD/BAT - [решено] Проверка выполнения xcopy

Сообщение Sat_Kelman »

День добрый!



Существует батник с такой строкой



Код:

Код: Выделить всё

xcopy /d /v /y /z "*.dpr" "\\serv\programs\All" >> %~n0.log

копирует с заменой на более новые файлы *.dpr в общую папку и записывает результат в лог.



Появилась необходимость совершить еще пару действий, но если файлы были скопированы.

Если ничего не копировалось то завершить батник.



Есть еще вариант, который меня очень устроит. Пока сделал так чтоб результат писал во временный файл tmp.log, содержимое которого потом добавляется в %~n0.log.

Если файлы не скопированы то в tmp.log будет запись "скопировано файлов 0" и размер файла получается 24 байта.

Вопрос - как проверить размер файла.

Что-то типа if размер tmp.log = 24 goto end

Есть какие команды на проверку размера файла?
Аватара пользователя
El Sanchez

Re: CMD/BAT - [решено] Проверка выполнения xcopy

Сообщение El Sanchez »

Sat_Kelman,



Код:

Код: Выделить всё

xcopy /d /v /y /z "*.dpr" "\\serv\programs\All"|find ": 0."&&exit /b 0
:: еще пара действий
...

Или лог-файл все же необходим?
Аватара пользователя
megaloman

Re: CMD/BAT - [решено] Проверка выполнения xcopy

Сообщение megaloman »

Вот вариант с лог-файлом. Способ не универсальный, особенно если язык не русский. Тогда надо правильно прописать ключевое слово, здесь это

Скопировано файлов: 0.

Как вариант, можно смотреть последние 4 символа, но я это не сделал, мне кажется, это не надёжнее

Код:

Код: Выделить всё

cls
@Echo Off
Set Otkuda="*.dpr"
Set Kuda="\\serv\programs\All"
Set Slovo="Скопировано файлов: 0."
Echo ------- %Date%   %Time% ------- >>%~n0.log
Set L=True
FOR /F "usebackq delims=" %%i IN (`XCOPY /d /s %Otkuda% %Kuda%`) DO Call :LogFile "%%i"
If %L%==False GoTo :Eof
rem Здесь делаем нечто в случае если файлы скопированы
rem --------------------------------------------------
Echo Файлы скопированы
rem --------------------------------------------------
GoTo :Eof
:LogFile
Echo %~1 >>%~n0.log
If %1==%Slovo% Set L=False

При работе xcopy возможна еще неприятность: а что делать, если какой-то файл не скопировался, например, был занят? (кстати, неплохо бы еще добавить ключ /C в Xcopy). При этом %Errorlevel% NEQ 0

Здесь эта ситуация не учтена
Аватара пользователя
Sat_Kelman

Re: CMD/BAT - [решено] Проверка выполнения xcopy

Сообщение Sat_Kelman »

Спасибо за советы, сделал вот так



Код:

Код: Выделить всё

echo %date% %time% %username% %computername% >> %~n0.log
rem копирует новые файлы на общий ресурс и записывает результат во временный файл 
xcopy /d /v /y /z "*.dpr" "\\serv\programs\All" > tmp.log
rem добавляет результат в общий лог 
1>>%~n0.log type tmp.log
rem проверяет наличие строки о количестве скопированных файлов и если находит строку "Скопировано файлов: 0." то идет на выход
For /F "usebackq delims=" %%i in (tmp.log) do if "%%i"=="Скопировано файлов: 0." goto end
Ответить

Вернуться в «Скриптовые языки администрирования Windows»