2013-03-27 3 views
9

У меня есть сценарий, в котором во время выполнения командного файла он переходит в другую папку (например, «../asdf»); и в конце выполнения он установит текущий рабочий каталог в ту же папку, откуда пользователь вызвал файл .bat.Восстановить рабочий стол по умолчанию, если файл bat завершен внезапно

Но если пользователь завершает пакетную обработку до его завершения, cmd показывает текущий рабочий каталог (скажем, «../asdf»).

Но в моем случае мне нужно восстановить рабочий каталог по умолчанию/предопределенному. Является ли это возможным?

  • Пакетный файл написан мной, поэтому я могу его изменить.
  • CMD открывается через ярлык на рабочем столе CMD, от которого я управляю; поэтому там могут быть созданы такие свойства, как рабочий каталог или передача аргументов CMD и т. д.
+0

Если пользователь завершает пакет, пакет не может восстановить папку по умолчанию. – Endoro

ответ

25

В своем пакетном скрипте используйте setlocal для инкапсуляции рабочей среды вашего пакетного сеанса. Если пользователь завершает сценарий перед возвратом cd или popd, ваш скрипт все равно будет завершен в каталоге, в котором он был запущен. Вот краткий тест:

@echo off 
setlocal 
pushd c:\Users 
cd 
exit /b 

Выход:

C:\Users\me\Desktop>test.bat 
c:\Users 

C:\Users\me\Desktop> 

Заметьте, что я не popd или cd %userprofile%\Desktop, но я до сих пор кончались на моем рабочем столе после того, как сценарий вышел.

Кроме того, setlocal не позволяет вам избавиться от среды с сиротскими переменными, которые ничего не значат за пределами вашего пакетного сценария. Это просто хорошая практика. На консоли введите help setlocal для получения дополнительной информации.

+0

+1. Сначала я подумал, что вы ошибаетесь, но это работает! 'setlocal' сохраняет текущий каталог и' endlocal' возвращается к нему, даже с несколькими вложенными парами 'setlocal/endlocal'! Это поведение недокументировано (проверено в Win-XP). Откуда вы узнали об этом? – Aacini

+1

@ Аасини - Только из моих собственных наблюдений. Я не думал о вложенности setlocals, но, я думаю, имеет смысл, что среды выполнения могут быть вложены таким образом. – rojo

+0

+1, у меня должна быть слабая память: facepalm: – Endoro

 Смежные вопросы

  • Нет связанных вопросов^_^