2016-03-13 3 views
1

Есть ли способ в пакетном файле регистрировать ошибку и успех командного файла?Успех пакетного файла и регистрация ошибок

Я пытаюсь скопировать файл с моего компьютера на 200 машин (отлично работает), но хочу знать, сбой и причина его отказа (потому что экраны уходят очень быстро).

@echo off 
if [%1]==[] goto usage 
@echo mapping l: to %1\c$ 
net use * /delete /y 
net use l: \\%1\c$ password /user:%1\administrator 

if ERRORLEVEL 1 (
echo failed 

net use l: \\%1\c$ password /user:%1\administrator 

) else (
goto mappingError 

) > command.txt 

::::::::::::::::::::::::::::::::::::::::::: :::::::::::::::::::::::::::::

@echo copying link file to C: Drive 
copy "c:\_\CopyFileToHost\logoff.cmd" l:\ 

:::::::::::::: :::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::

@echo deleting l: mapping 
net use l: /delete /y 

@echo off 
goto :eof 

:usage 
@echo Usage: %0 hostname 
exit /B 1 

:mappingError 
@echo Error mapping remote drive, exiting 
exit /B 1 
+0

Вы можете зарегистрировать ошибку и успех команды, но не пакетный файл. Будет ли '% 1' когда-либо содержать пробелы или не буквенно-цифровые символы? Вы хотите регистрировать неудачу для сопоставления диска или ошибок при копировании файлов? – foxidrive

+0

Я хотел бы зарегистрировать ошибку для сопоставления и ошибки копирования файлов. Если бы мне пришлось выбирать только один, я бы хотел, чтобы ошибки в копировании файлов были. и% 1 будет содержать только буквенно-цифровые символы - без пробелов. – swstrau118

ответ

1

Во-первых, не используйте

if [%1]==[] goto usage 

, потому что квадратные скобки не имеют особого смысла здесь. Лучше использует

if "%~1"=="" goto usage 

цитата характер двойной имеет особое значение, поскольку она позволяет сравнивать строки, содержащие 1 или более пробелов или 1 или более символов &()[]{}^=;!'+,`~.

%~1 означает, что первый аргумент с окружающими двойными кавычками удален. Дополнительную информацию см. В разделе справки: запуск в окне командной строки call /?.

Во-вторых, прочтите статьи Microsoft о Using command redirection operators и Testing for a Specific Error Level in Batch Files, чтобы понять приведенный ниже пакетный код.

@echo off 
if "%~1"=="" goto usage 
%SystemRoot%\System32\net.exe use L: /delete /y 2>nul 
(
    echo Mapping L: to %~1\c$ ... 
    %SystemRoot%\System32\net.exe use L: "\\%~1\c$" password /user:%~1\administrator /persistent:no 
    if not errorlevel 1 (
     echo Copying the file X ... 
     rem copy X L:\ 
     echo Disconnecting network drive L: ... 
     %SystemRoot%\System32\net.exe use L: /delete /y 
    ) 
) >command.txt 2>&1 
goto :EOF 

:usage 
echo Call this batch file with name of computer as parameter. 
echo. 
pause 

Сообщения об ошибках, записанные в STDERR присоединяются к STDOUT по 2>&1, к которым стандартные сообщения записываются по умолчанию. И все написанное до stdout перенаправлено в файл command.txt в текущем каталоге, и поэтому текстовый файл содержит стандартные и сообщения об ошибках в правильном порядке вывода.

Если вы хотите, чтобы команды также были записаны в текстовый файл, чтобы легче определить, из какой команды выдается сообщение об ошибке или стандартное сообщение, echo дополнительно тоже команды.

1

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

@echo off 
if [%1]==[] goto usage 
echo mapping l: to %1\c$ 
net use * /delete /y 
net use l: \\%1\c$ password /user:%1\administrator 
if not exist L:\ (echo %1 failed mapping drive letter>>"%userprofile%\desktop\net use log.txt"& goto :EOF) 

echo copying link file to C: Drive 
copy "c:\_\CopyFileToHost\logoff.cmd" l:\ 
if not exist "L:\logoff.cmd" (echo %1 failed copying "c:\_\CopyFileToHost\logoff.cmd">>"%userprofile%\desktop\net use log.txt") 

echo deleting l: mapping 
net use l: /delete /y 

goto :eof 

:usage 
echo Usage: %0 hostname 
exit /B 1 
Смежные вопросы