PDA

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


Sat_Kelman
31-03-2011, 10:35
День добрый!

Существует батник с такой строкой
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
31-03-2011, 16:42
Sat_Kelman,

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

Или лог-файл все же необходим?

megaloman
31-03-2011, 20:02
Вот вариант с лог-файлом. Способ не универсальный, особенно если язык не русский. Тогда надо правильно прописать ключевое слово, здесь это
Скопировано файлов: 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
01-04-2011, 08:12
Спасибо за советы, сделал вот так
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




© OSzone.net 2001-2012