PUSHD — сохранить каталог в стек и перейти в новый

PUSHD сохраняет текущий каталог в стек и переходит в указанный. Незаменима в скриптах для временной смены директории с возвратом через POPD.

PUSHD сохраняет текущий рабочий каталог в стек и одновременно переходит в указанную директорию. Команда используется в пакетных скриптах в паре с POPD: PUSHD «запоминает» место, POPD возвращает в него. Дополнительный бонус — PUSHD умеет автоматически подключать UNC-пути как временный буквенный диск.

Синтаксис команды 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.

Оцените статью
( Пока оценок нет )
MW10
Добавить комментарий

Нажимая на кнопку "Отправить комментарий", я даю согласие на обработку персональных данных и принимаю политику конфиденциальности.