Как запустить скрипт BAT без изменения каталогов? - PullRequest
1 голос
/ 14 февраля 2011

Как запустить сценарий BAT без изменения каталогов?

Я нахожусь в ./a, а компакт-диски сценария в ./a/bc.Если по какой-либо причине мне нужно прекратить работу сценария, я нахожусь в bc вместо a.Как мне запустить скрипт и не менять мою папку?

Кроме того, мне не нравится, как он спрашивает меня, хочу ли я прекратить работу моего скрипта.Могу ли я отключить это и позволить ему прекратить работу?

Ответы [ 4 ]

2 голосов
/ 28 февраля 2011

Для этого полезна команда setlocal . Любые изменения каталога после setlocal являются локальными для пакетного сценария. Кстати, это также относится к любым переменным среды ( set команды).

Например, после запуска этого пакетного скрипта:

cd /d c:\temp
setlocal
cd /d c:\windows

каталог будет c: \ temp, поскольку второй компакт-диск в сценарии является локальным по отношению к сценарию.

2 голосов
/ 14 февраля 2011

Первый вопрос: зачем вам менять каталог?Можете ли вы просто работать с путями относительно одного из ваших командных файлов?(например, используя %~dp0\a\bc для ссылки на каталог)

Но если вам действительно нужно это сделать, вы можете сделать следующее:

REM change the current directory
pushd ..\a\bc

.. do your stuff here

REM restore the old "current directory"
popd
2 голосов
/ 14 февраля 2011

Вы можете запустить свой скрипт с start yourscript.bat. Это заставляет его работать в новом командном окне и, следовательно, не влияет на рабочий каталог командной строки, запустившей сценарий.

Другая возможность - не использовать cd и использовать вместо этого абсолютные пути.

1 голос
/ 15 февраля 2011

Если вам не нужно распространять изменения переменных среды в текущую среду и не может коснуться пакетного файла (чтобы использовать вариант pushd / popd, который я обычно использую), вы можетевсе еще порождает новый экземпляр cmd:

cmd /c myBatch.cmd arg1 arg2 ...

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

...