В этом случае я бы выбрал xcopy
, поскольку уровни ошибок задокументированы (см. документация xcopy , перефразировано ниже):
Exit
code Description
==== ===========
0 Files were copied without error.
1 No files were found to copy.
2 The user pressed CTRL+C to terminate xcopy.
4 Initialization error occurred. There is not
enough memory or disk space, or you entered
an invalid drive name or invalid syntax on
the command line.
5 Disk write error occurred.
В любом случае xcopy
гораздо более мощное решение. эквивалентная документация для copy
не документирует уровни ошибок.
Кроме того, вы можете переосмыслить использование переменной %errorlevel%
. Это имеет неприятные последствия (по крайней мере, в некоторых версиях Windows), если кто-то явно сделал что-то глупое, например:
set errorlevel=22
В этих случаях будет использоваться фактическая переменная вместо того, чтобы понять фактический уровень ошибки.«Нормальный» способ сделать это (в порядке убывания, поскольку errorlevel
- это проверка «больше или равно»):
if errorlevel 2 (
echo Copy x y failed due to reason 2
exit /B
)
if errorlevel 1 (
echo Copy x y failed due to reason 1
exit /B
)
Если вы используете Win7 или Win Server 2008или позже, вы должны взглянуть на Robocopy , который сейчас является предпочтительным решением массового копирования.