Вызов SUBST из пакетного файла Windows - PullRequest
2 голосов
/ 15 мая 2019

У меня проблема с вызовом SUBST из командного файла Windows.Я хочу использовать один пакет для создания сопоставления виртуального диска и второй пакет для размонтирования диска.Однако размонтирование выдает сообщение об ошибке:

The system cannot find the path specified.

Вот мои командные файлы:

prepare.bat

pushd .
subst X: .
X:

cleanup.bat

popd
subst X: /D

Выполнение дает следующие результаты:

d:\>prepare.bat

d:\>pushd .

d:\>subst X: .

d:\>X:

X:\>cleanup.bat

X:\>popd

d:\>subst X: /D
Das System kann den angegebenen Pfad nicht finden.

d:\>

Может кто-нибудь объяснить мне, что здесь происходит и как это исправить?

EDIT:

Некоторые странные вещи, на которые следует обратить внимание:

  • Ввод всех команд непосредственно в консоль работает.Ошибка возникает только при использовании пакетных файлов.
  • Непосредственно перед вызовом subst X: /D сопоставление диска в порядке.Непосредственно после вызова сопоставление диска действительно было удалено.Но почему я получаю сообщение об ошибке?

1 Ответ

4 голосов
/ 15 мая 2019

Причиной такого поведения является способ выполнения пакетного сценария. Он читает строку, выполняет ее и читает следующую строку для выполнения, пока не останется больше строк.

Когда вы отключаете диск, вы уничтожаете (виртуальный) путь к сценарию, поэтому «чтение следующей строки» не выполняется - сценарий «пропал». Даже если размонтирование является самой последней строкой скрипта, интерпретатор не узнает, пока не попытается прочитать следующую строку - и не сможет, потому что скрипт больше не доступен.

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

Если вы вводите команду в командной строке, «следующая строка» не ожидается, поэтому ошибка не возникает.

Редактировать

чтобы избежать сообщения об ошибке:

subst x: /d & goto :eof

Строка считывается и анализируется за один раз, и когда эта строка явно выходит из пакета, интерпретатор не пытается прочитать следующую строку .

...