DOSバッチ処理では、カレントディレクトリのソリューションとしてUNCパスをサポートしていません。
そのまま、コードに進み、Internet Neighborhoodを開く→ネットワーク全体→Microsofi Windows Network→ワークグループ内の対応するコンピュータを見つけ、ダブルクリックで以下のバッチコードをテストします。
カレントディレクトリを表示する.bat
cd /d %~dp0
echo %cd%
pushd %~dp0
echo %cd%
popd
pause
このように、UNCディレクトリにジャンプするためにcdコマンドを使い始めると、"CMD does not support the UNC path as the current directory."、つまり、cdコマンドはローカルディレクトリにしかジャンプできず、UNCディレクトリにはできないことがわかります。
では、どう良いのでしょうか?2つ目のコマンド、pushdを見てください。pushd %~dp0" を使うと、UNCパスをローカルのZドライブにマッピングすることができます。このコマンドを実行すると、次のプロンプトは元のC:↵ではなく、マッピングに成功したUNCパスであるZ:↵になっていますね。
この時点で、UNCディレクトリをローカルディレクトリのように操作することができます(実際にはマイコンピュータにZドライブのマッピングがあり、これがローカルのハードディスクに相当します)。図のようにcd、dirなどのコマンドが使えるようになります。
最後に、ここまでやったらpopdを使ってマッピングを切断するのを忘れないように。切断すると、プロンプトは再び元のC:⇄Windows>になります。
もう一つの良い解決策は、バッチプロセスがあるディレクトリの前に変数 %~dp0 を直接追加することです。バッチ名を呼び出すか、それをコピーしてください。
ただし、一般的にファイル共有は読み込み専用、UNCディレクトリは書き込み不可なので、echo > file1.txt, fiel1.txt のような文は %~dp0 を付けてはいけないし、デフォルトは C:\windows ディレクトリだけであることに注意してください。
@echo off
%~dp0bootice\BOOTICEx86 /DEVICE=0 /mbr /install /type=GRUB4DOS /v045 /boot_file=grldr /quiet
echo n|copy /-y %~dp0grub\grldr.* %systemdrive%\
echo n|copy /-y %~dp0grub\menu.lst %systemdrive%\
attrib +h %systemdrive%\grldr.*
attrib +h %systemdrive%\menu.lst
ECHO ┌─────────────────────────────────┐
ECHO │ Already wrote grub4dos to the hard disk MBR! Press any key to exit. │
ECHO └─────────────────────────────────┘
pause >nul
サポートされていないUNCパスの解決 Additional
本日、Win7システムで共有ファイルパスにあるbatスクリプトを実行したところ、以下のエラーメッセージに遭遇しました。
その内容は
CMD.EXEは、上記のパスをカレントディレクトリとして起動されました。UNC パスはサポートされていません。デフォルトでは、Windowsのディレクトリが設定されています。
発生原因
おそらくネットワークパス内にあるためだと思いますが、通常のディレクトリ内であれば問題ありません。
回避策
レジストリに、値を追加するだけです。パスは以下の通りです。
HKEY_CURRENT_USER SoftwareMicrosoft Command Processor
DisableUNCCheckという値を追加し、REG_DWORDをタイプして値を1(16進数)に設定します。
バッチファイルは次のようになります(正しいプロンプトで実行されますが、実際には追加されないため、修正が必要です)。
<ブロッククオート
HKEY_CURRENT_USERSoftwareMicrosoftCommand Processor" /v "DisableUNCCheck" /t "REG_DWORD" /d " ;1" /f
今回の記事はここまでです。
関連
-
バッチスクリプトによる特定ディレクトリでのGit-Bashウィンドウの立ち上げ
-
万年暦(旧暦含む)の一括実装コード
-
Windowsのcmdコマンドラインの入出力リダイレクト問題
-
ファイル(フォルダ)の存在を検出するWindows用バッチプログラム
-
set /p=コマンドを詳しく説明します。
-
フォルダバット内の全ファイルの個数と合計サイズの一括統計処理
-
Dosバッチ書き込みワンクリッククリーンシステムジャンクbatコード
-
Batはforfilesを使って期限切れのファイルを自動的に一括削除する
-
shutdownコマンドによるリモートシャットダウンとリブート
-
Filemanのファイル名をフォームの対応する名前に一括インポートする
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン