3流プログラマのメモ書き

元開発職→社内SE→派遣で営業支援の三流プログラマのIT技術メモ書き。 このメモが忘れっぽい自分とググってきた技術者の役に立ってくれれば幸いです。(jehupc.exblog.jpから移転中)

バッチファイルでUNCをカレントディレクトリにしたい

共有フォルダ上に配置するバッチファイルから、相対パス指定で同じフォルダにあるexeを呼び出す処理が必要になりました。

で、バッチファイルに当初下記のように書いていました。

cd %~dp0

test.exe

pause

そうすると下記のようにUNCパスは使えないって怒られます。

CMD では UNC パスは現在のディレクトリとしてサポートされません。

で、調べた結果初めて知ったんですが、Windowsには pushd というコマンドもあるようです。

pushd コマンドは cd コマンドと同じようにカレントフォルダを移動するコマンドなんですが、違いはスタックでカレントフォルダの履歴を残すことです。そして、popd コマンドでひとつ前のフォルダに移動することができます。

これは非常に便利ですね。

この pushd コマンドですが、もう一つうれしい機能があり、それは UNC をカレントディレクトリにしようとすると適当な空きドライブに対して、ネットワークドライブを設定し、そのドライブに移動してカレントフォルダを指定してくれるようです。

つまり、UNCパスが使えるということですね。

ということで共有フォルダ上のバッチファイルを下記のように変更すればうまくいきました。

pushd %~dp0

test.exe

pause

参考:

ネットワークドライブでのバッチファイルの実行 - ULog

pushd/popdでフォルダを移動する - @IT

共有フォルダ上のバッチファイルのカレントパスはどこになる?