ネットワークコンピュータ上でバッチ処理がエラーになる

Windows コマンドプロンプト ポケットリファレンス

はじめに

事務職でもエンジニアでも、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

 

Indeed からの求人