Пакет Windows: прочитати рядок, що підвищив рівень помилок


0

Чи є спосіб прочитати рядок коду, який підняв рівень помилок зсередини пакетного файлу після його виконання? (Боюся, немає).

Наприклад, команда net use H: \\MyComputer\sharename02призведе до того, що в System error 85 has occurred. The local device name is already in use.цьому випадку диск H: недоступний, а рівень помилок більше не 0. Моя мета - отримати цю команду, щоб змінити її, приблизно так:

@echo off
set _counter=0

net use F: \\MyComputer\sharename01 /persistent:No 
IF %ERRORLEVEL% NEQ 0 goto manip
_counter=_counter+1

:next2
net use H: \\MyComputer\sharename02 /persistent:No
IF %ERRORLEVEL% NEQ 0 goto manip
_counter=_counter+1

:next3
net use I: \\MyComputer\sharename03 /persistent:No
IF %ERRORLEVEL% NEQ 0 goto manip
_counter=_counter+1

IF %ERRORLEVEL% EQU 0 goto end

:manip
(do something with...
_variable="\\MyComputer\sharenameXY"
...)
_counter=_counter+1
if _counter==3 (goto end)
else (goto next%_counter%)

:end

Розділ :manipбуде працювати з командою, net use H: \\MyComputer\sharename02яка зберігається в _variable.

Я знаю, що така проблема не дуже підходить для пакетної обробки, і, ймовірно, було б простіше вирішити, використовуючи VBscript замість пакетної.

Сподіваюсь, що рішення знайдеться, інакше мені потрібно буде переписати все, що вже є у VBscript або Powershell.

Відповіді:


1

Ні, немає. Однак ви можете використовувати різні види петель:

call :map_share Z Y X W V U T S R Q P O N M L K J I H G F E D C B A
echo I got %letter%!
goto :eof

:map_share
if "%~1"=="" goto :eof
net use %1: \\MyComputer\sharename02 /persistent:No || (
    shift
    goto :map_share
)
set letter=%1
goto :eof

Як я припускав у своєму запитанні, я боявся, що цього не буде. Отже, ваша відповідь правильна, і я приймаю її як таку. Наданий код також працює. Дякую.
snahl

Тільки тепер мені стає очевидним, наскільки ваш компактний і таким корисним код.
snahl
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.