Как установить рабочий каталог команды в пакетном файле Windows?

скажем, у меня есть следующие команды:

Prog1.exe
D:SomeDirProg2.exe
Prog3.exe

теперь, скажем, для второй строки, я хотел бы, чтобы рабочий каталог был D:SomeDir, но в Prog1.exe и Prog3.exe я хочу рабочий каталог по умолчанию (обычно, где мой .bat файл). Если я попробую это

Prog1.exe
cd D:SomeDir
D:SomeDirProg2.exe
Prog3.exe

по-видимому, Prog3 будет выполнен в SomeDir, что не то, что я хочу.

3 ответов


вы можете использовать команды pushd/popd (справка с pushd /?)

Prog1.exe
Pushd D:\SomeDir
Prog2.exe
popd
Prog3.exe

вы можете использовать команду cd (help with cd /?) с переменной %0, путь к файлу bat.

Prog1.exe
cd D:\SomeDir
Prog2.exe
cd %dp0
Prog3.exe

полный список модификаторов %0 см. В разделе call /? или for /? помочь.

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


что сработало для меня, это добавление /d:

cd /d C:\nginx
ECHO Stopping nginx...
start nginx -s quit

(когда у меня не было /d, это не сработало.)

https://stackoverflow.com/a/18310141/470749 пытается объяснить это.