PUSHD сохраняет текущий рабочий каталог в стек и одновременно переходит в указанную директорию. Команда используется в пакетных скриптах в паре с POPD: PUSHD «запоминает» место, POPD возвращает в него. Дополнительный бонус — PUSHD умеет автоматически подключать UNC-пути как временный буквенный диск.
- Синтаксис команды PUSHD
- Ключи и параметры
- Примеры использования
- Временный переход в другой каталог
- Вложенный стек — несколько уровней переходов
- Подключение сетевого ресурса через UNC
- Использование %~dp0 в скрипте — переход в папку скрипта
- Сохранить каталог без перехода (PUSHD без аргументов)
- Проверка перехода через ERRORLEVEL
- Частые ошибки и решения
- Когда применять, а когда нет
- FAQ
- В чём разница между PUSHD и CD?
- Может ли PUSHD работать с UNC-путями вида \сервер\папка?
- Как передать путь с пробелами?
- Что произойдёт, если вызвать PUSHD без аргументов?
- Сколько раз можно вызвать PUSHD подряд?
- Работает ли PUSHD в PowerShell?
Синтаксис команды PUSHD
PUSHD [[диск:]путь | UNC-путь]
Плейсхолдеры:
диск:— необязательная буква диска (например,D:)путь— абсолютный или относительный путь к каталогуUNC-путь— сетевой путь вида\\сервер\ресурс\папка; PUSHD создаст временный буквенный диск и перейдёт в него
Если вызвать PUSHD без аргументов, текущий каталог сохранится в стеке, но переход не произойдёт — останетесь в том же месте.
Ключи и параметры
PUSHD не имеет ключей командной строки. Всё поведение определяется переданным путём. Буква временного диска для UNC-путей назначается автоматически — первая доступная буква, начиная с Z в обратном алфавитном порядке.
Примеры использования
Временный переход в другой каталог
Сохраняем текущее местоположение, переходим в нужную папку, работаем, возвращаемся.
PUSHD C:\Windows\System32 dir *.exe | find "net" POPD ECHO Вернулись: %CD%
После POPD командная строка вернётся туда, откуда был вызван PUSHD.
Вложенный стек — несколько уровней переходов
Можно вызывать PUSHD несколько раз подряд; каждый вызов добавляет запись в стек.
PUSHD C:\Logs PUSHD C:\Temp\Work PUSHD D:\Archive REM работаем в D:\Archive POPD REM теперь C:\Temp\Work POPD REM теперь C:\Logs POPD REM вернулись в исходный каталог
Подключение сетевого ресурса через UNC
PUSHD с UNC-путём создаёт временную букву диска — удобно для скриптов, которым нужен доступ к сетевой папке.
PUSHD \\fileserver\shared\backups copy *.bak C:\LocalBackups\ POPD
После POPD временная буква диска удаляется автоматически; сетевой ресурс отключается.
Использование %~dp0 в скрипте — переход в папку скрипта
Надёжный способ сделать рабочим каталогом папку самого bat-файла, независимо от того, откуда его запустили.
@echo off PUSHD %~dp0 ECHO Работаем в: %CD% call :do_work POPD EXIT /B :do_work REM все пути внутри блока — относительно папки скрипта copy config.ini C:\ProgramData\MyApp\
Сохранить каталог без перехода (PUSHD без аргументов)
Если нужно добавить текущую директорию в стек, не меняя её, — вызовите PUSHD без аргументов:
PUSHD REM ... делаем что-то, возможно меняем каталог командой CD ... POPD REM возврат в каталог, который был на момент вызова PUSHD
Проверка перехода через ERRORLEVEL
Если указанный каталог не существует, PUSHD установит ERRORLEVEL в 1:
PUSHD C:\NonExistent\Path
IF ERRORLEVEL 1 (
ECHO Каталог не найден, переход не выполнен
) ELSE (
ECHO Переход выполнен: %CD%
POPD
) Частые ошибки и решения
| Ошибка / симптом | Причина | Решение |
|---|---|---|
| «Не удаётся найти указанный путь» | Каталог не существует или путь содержит опечатку | Проверить путь через IF EXIST каталог; создать каталог через MD при необходимости |
| UNC-путь не подключается как диск | Нет доступных букв дисков или сетевой ресурс недоступен | Отключить неиспользуемые сетевые диски; проверить сетевое подключение и права доступа |
| POPD не возвращает в ожидаемый каталог | Число вызовов POPD не совпадает с числом PUSHD, либо стек сброшен при завершении CMD | Следить за симметрией PUSHD/POPD; добавить отладочный вывод ECHO Стек: %CD% |
| В PowerShell PUSHD не работает как в CMD | В PowerShell PUSHD — псевдоним для Push-Location, синтаксис совместим, но UNC-поведение отличается | Использовать Push-Location явно; для UNC в PS использовать New-PSDrive |
| Пробелы в пути вызывают ошибку | CMD разбивает путь по пробелу без кавычек | Заключить путь в двойные кавычки: PUSHD "C:\Program Files\MyApp" |
Когда применять, а когда нет
PUSHD незаменима в пакетных скриптах (.bat, .cmd), где нужно временно сменить рабочий каталог и гарантированно вернуться. Особую ценность представляет возможность работы с UNC-путями через автоматическое назначение буквы диска — это позволяет использовать сетевые папки там, где обычный CD выдаёт ошибку. Ограничение: стек существует только в пределах одного сеанса CMD; при открытии нового окна или запуске дочернего процесса стек не наследуется. В PowerShell аналогом служит Push-Location (псевдоним pushd), который поддерживает именованные стеки через параметр -StackName.
FAQ
В чём разница между PUSHD и CD?
CD просто меняет текущий каталог и не сохраняет предыдущий. PUSHD сохраняет исходный каталог в стек, что позволяет вернуться в него через POPD.
Может ли PUSHD работать с UNC-путями вида \\сервер\папка?
Да — это одно из главных преимуществ команды. PUSHD создаёт временную букву диска для UNC-пути, а POPD её удаляет. Обычный CD \\сервер\папка в CMD работает только при определённых условиях.
Как передать путь с пробелами?
Заключите путь в двойные кавычки: PUSHD "C:\Users\Ivan\My Documents".
Что произойдёт, если вызвать PUSHD без аргументов?
Текущий каталог добавится в стек, но переход не произойдёт. Последующий POPD вернёт именно в этот каталог.
Сколько раз можно вызвать PUSHD подряд?
Практически неограниченное количество — стек ограничен только доступной памятью. Для обычных сценариев это несущественное ограничение.
Работает ли PUSHD в PowerShell?
В PowerShell pushd является псевдонимом командлета Push-Location. Базовый синтаксис совпадает, но поведение при работе с UNC и именованными стеками отличается от CMD.


