pushd, popd
目次
cd でフォルダを移動すると、「さっきいたフォルダ」を自分で覚えておかなければ戻れません。
pushd は現在のフォルダを記憶してから移動し、popd は記憶したフォルダへ戻るコマンドです。一時的に別のフォルダで作業して、終わったら元の場所へ戻りたいときに便利です。
基本構文
pushd フォルダのパス
popd
pushd: 現在のフォルダを記憶し、指定したフォルダへ移動します。popd: 最後に記憶したフォルダへ戻ります。
基本的な使い方
pushd C:\Windows\System32
popd

中小企業経営者のためのRPA入門 RPA導入を成功させる方法

60分でわかる! AIエージェント 超入門

コマンドラインの黒い画面が怖いんです。

知識・才能ゼロでもらく~に月10万円稼ぐ! よくわかるAI副業超入門
popd を実行すると、pushd する前にいた C:\Users\sample に戻ります。
cd は別のドライブへ移動するときに /d が必要ですが、pushd はドライブが違っていてもそのまま移動できます。移動前のフォルダを記憶してくれる点も cd との大きな違いです。
記憶したフォルダはスタックに積まれる
pushd で記憶したフォルダは、スタック(積み重ねた置き場)に保存されます。後から記憶したものが上に載り、popd は一番上から順に取り出します。
pushd C:\Windows
pushd C:\Users
pushd D:\work
この状態で popd を実行するたびに、記憶したフォルダを新しい順にさかのぼって戻ります。
- 1 回目の
popd:C:\Usersに戻る - 2 回目の
popd:C:\Windowsに戻る - 3 回目の
popd: 最初にいたフォルダに戻る
スタックの中身を確認する
引数なしで pushd を実行すると、記憶しているフォルダの一覧が表示されます。コマンド拡張が有効な通常の環境で使えます。
上の行ほど、次の popd で戻る場所に近い(新しく記憶した)フォルダです。
ネットワークパス(UNC)に移動する
cd ではネットワーク上の \\server\share のようなパスへ移動できません。pushd なら、空いているドライブ文字が自動的に割り当てられて移動できます。
pushd "\\server\share\work"
dir
popd
割り当てられるドライブ文字は、Z: から順にさかのぼって空いているものが使われます。popd で元のフォルダに戻ると、割り当てられたドライブも解除されます。
UNC パス上のバッチファイルをそのまま実行すると、カレントディレクトリに UNC パスを設定できず、警告が表示されることがあります。バッチファイルの先頭に pushd "%~dp0" を書くと、バッチファイルの置き場所に移動してから処理を始められます。
バッチファイルで使う
バッチファイルの中で別のフォルダの処理をするときは、pushd と popd で挟むと、処理の前後でカレントディレクトリが変わらずに済みます。
@echo off
pushd "%~dp0"
echo バッチファイルのあるフォルダ: %cd%
pushd "C:\data"
if not exist "%~dp0backup" mkdir "%~dp0backup"
copy *.txt "%~dp0backup\"
popd
echo バッチファイルのフォルダに戻りました: %cd%
popd
%~dp0 はバッチファイル自身のあるフォルダを表します。詳しくは
pushd の回数と popd の回数がずれると、バッチファイルの終了後も別のフォルダに居続けることがあります。pushd と popd は必ず対にして使いましょう。
存在しないフォルダを指定したとき
存在しないフォルダを pushd に指定すると、エラーメッセージが表示されて移動は行われません。
移動に失敗したあとに popd を実行すると、それ以前に記憶していたフォルダへ戻ってしまいます。バッチファイルでは、|| で失敗時の処理を分けておくと安全です。
pushd "C:\data" || exit /b 1
rem ここに処理を書く
popd
|| の使い方は
PowerShell の場合
PowerShell では pushd と popd が、それぞれ Push-Location と Pop-Location の別名として使えます。ただし、スタックはコマンドプロンプトとは別に管理されます。
まとめ
| 目的 | コマンド |
|---|---|
| 現在のフォルダを記憶して移動する | pushd フォルダ |
| 記憶したフォルダへ戻る | popd |
| 記憶しているフォルダを一覧表示する | pushd(引数なし) |
| ネットワークパスへ移動する | pushd "\\server\share" |
| バッチファイルの場所へ移動する | pushd "%~dp0" |