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

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

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

Windows 共有フォルダにバッチファイルを置いて、同じフォルダに置いてあるexeファイルを相対パス指定で実行する処理を書きました。下記のような感じです。

バッチファイルを ¥¥servername¥testdir¥test.bat とします。バッチ内では ¥¥servername¥testdir¥text.exe を実行させます。

@echo off

test.exe

それをグループポリシーのスタートアップスクリプトで実行させようとしたが、どうにも実行されません。。

で、普通にエクスプローラ上からそのバッチを実行すると、バッチ実行時のカレントパスが C:¥windows 直下になっていました。

どうやらバッチファイルは普通には UNC パスをカレントパスにできないみたいです。

よって、実行時のカレントパスがシステムフォルダとなり、相対パスで指定してた test.exe が見つからないのでエラーとなった感じです。

ただ、カレントパスを UNC パスにはできませんが、ファイルの指定には UNC パスは指定できるようです。

こんな感じです。

C:\Documents and Settings\usera>copy \\servername\testdir\test.txt \\servername\testdir\test222.txt

1 個のファイルをコピーしました。

ということで、最初問題となったバッチは exe を相対パス指定ではなく UNC パスを使った絶対パスとすることで解決しました。

余談ですが、コマンドプロンプトでUNC パスをカレントにするには、ネットワークドライブとして割り当てる必要があるようです。

そこら辺は下記が参考となります。

コマンドプロンプトで「CMD では UNC パスは現在のディレクトリとしてサポートされません。」

共有フォルダ上で,マウスだけで一発でコマンドプロンプトを開く方法 (UNCパスへのpushdをバッチクリックで済ませる) - 主に言語とシステム開発に関して