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

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

Sat_Kelman 31-03-2011 10:35 1647796

Проверка выполнения xcopy
 
День добрый!

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

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 1648175

Sat_Kelman,
Код:

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

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

megaloman 31-03-2011 20:02 1648344

Вот вариант с лог-файлом. Способ не универсальный, особенно если язык не русский. Тогда надо правильно прописать ключевое слово, здесь это
Скопировано файлов: 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 1648588

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

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



Время: 22:23.

Время: 22:23.
© OSzone.net 2001-