ネットワークコンピュータ上でバッチ処理がエラーになる
はじめに
事務職でもエンジニアでも、Windowsの知識が多少ある方ならば、仕事効率化のために、ちょっとしたバッチファイルを作る事もあるかと思います。
そんなときに、バッチ処理がエラーで動かず、解決策がわからずに利用を諦めたという人もいるかもしれません。
何気なく使っているWindowsコマンドプロンプトも意外と奥が深いよ、というのが今回のお話。
結論
バッチ処理の先頭で「pushd %~dp0」を実行する。
経緯
ファイルサーバー上でバッチファイルを実行したところ、「UNC パスはサポートされません。Windows ディレクトリを既定で使用します。」というエラーが発生。
過去に何度も実行しており動かないはずはないのだが、今回は別のファイルサーバーで実行したため動かなかったと思われる。
調べてみると、ファイルサーバーのようなネットワーク上でバッチファイルを実行すると、エラーが発生する事がある模様。
どうやら解決策には、ネットワークドライブを割り当てるか、レジストリを操作するという方法があるらしい。
http://pasofaq.jp/windows/command/disableunccheck.htm
ただ、いつも同じファイルサーバーで実行するわけではないため、その度にネットワークドライブを割り当てなくてはならず、非常に面倒。
かといって、職場のPCのため、勝手にレジストリをいじるのは避けたいところ。
思い悩んでさらに調べていくと、自動でネットワークドライブを割り当てるコマンドを発見!
http://futuremix.org/2009/10/unc-support-for-cmd
あとはバッチファイルを実行したフォルダの情報が取れれば、全て自動化できそう。
こちらも調べていくと、すぐに解決策が見つかった。
カレントディレクトリをバッチファイルのディレクトリにする - 強火で進め
PUSHDコマンドと%0変数を組み合わせて、無事解決できました。めでたしめでたし。
まとめ
割り当てたネットワークドライブは、POPDコマンド(ネットワークドライブ切断)を実行しなくても、バッチ処理が終了したときに勝手に切断してくれました。
http://toriaezuyattemiru.cocolog-nifty.com/blog/2010/07/unc-cd03.html