2017-01-30 2 views
0

サーバの場所から問題なくバッチファイルを実行するのに、pushd "%~dp0" trickを長年使用しています。 CMD拡張機能が利用できないか、ドライブ文字(ref1ref2)が不足しているためではありません。何が起こっているのか?UNCパスが許可されていないため、cmd拡張機能が有効になっていません。

システムはWin7-Pro SP1 x64です。

サードパーティは、(私はこれらをインストールした後のpushd + UNCを使用しましたかなり確信している、それは非常に一般的な手法だが、それに誓うことができない)と相互作用するか、またはCMDを変更したインストール:

d:\>pushd \\server4\share 
' ' 
CMD does not support UNC paths as current directories. 

d:\>reg query "HKCU\Software\Microsoft\Command Processor" /v EnableExtensions 

HKEY_CURRENT_USER\Software\Microsoft\Command Processor 
    EnableExtensions REG_DWORD 0x1 

d:\>net use 
New connections will be remembered. 

Status  Local  Remote     Network 
------------------------------------------------------------------------------- 
OK   B:  \\server1\dev    Microsoft Windows Network 
OK   F:  \\server1\dev    Microsoft Windows Network 
OK   G:  \\server2\corp    Microsoft Windows Network 
OK   H:  \\server3\home    Microsoft Windows Network 
OK   I:  \\server4\share   Microsoft Windows Network 
OK   N:  \\server1\dev    Microsoft Windows Network 
OK   O:  \\server1\dev    Microsoft Windows Network 
OK   P:  \\server5\files   Microsoft Windows Network 
OK   Q:  \\server1\dev    Microsoft Windows Network 
OK   R:  \\server5\work    Microsoft Windows Network 
      S:  \\server6\data    Microsoft Windows Network 
OK   T:  \\server5\maps    Microsoft Windows Network 
OK   U:  \\server7\layers   Microsoft Windows Network 
OK   V:  \\server8\home\me   Microsoft Windows Network 
OK   W:  \\server5\warehouse  Microsoft Windows Network 
OK   X:  \\server5\work    Microsoft Windows Network 
OK   Y:  \\server5\dev_repo   Microsoft Windows Network 
OK   Z:  \\server5\repository  Microsoft Windows Network 
OK      \\server5\work    Microsoft Windows Network 
         \\mysites.sharepoint.org\DavWWWRoot Web Client Network 
OK      \\server4\ITSupport  Microsoft Windows Network 
         \\[email protected]\DavWWWRoot Web Client Network 
         \\sharepoint.org\DavWWWRoot  Web Client Network 

The command completed successfully. 
+0

解決策ではありませんが、 'pushd'が失敗した場合は、次のようにします:' pushd \\ server4 \ share || exit/B 1'なので、他の 'pushd'からパスを失う可能性のある' popd'が実行されていません。 – aschipfl

+0

バッチファイルで直接UNCパスを使用するだけではどうですか?私はいつかMSがドライブレターを取り除き、マウントポイントを使うことを望んでいます。 – Squashman

答えて

0

これがわかりました! I は、ドライブ文字のうち、でしたが、マップされたドライブまたはローカルドライブからのものではありません。私は統合されたUSBハブを備えたDellのディスプレイを持っており、デバイスが差し込まれていなくてもドライブ文字J:Lをあらかじめ割り当てています。

エラーが発生するまで、すべての不要なマップドライブを削除し、繰り返してpushd \\server\shareを削除すると、ドライブ文字が何度かジャンプしてディスク管理が表示されていました。

D:\>pushd \\server\share 

Q:\>pushd \\server\share 

O:\>pushd \\server\share 

N:\>pushd \\server\share 

F:\>pushd \\server\share 

B:\>pushd \\server\share 
' ' 
CMD does not support UNC paths as current directories. 

Disk Management showing pre-allocated USB drive letters

+1

残念ながら、 'net use'は文字以外の文字をドライブ_letters_としてサポートしていません(ほぼすべての文字を許可する' subst'とは対照的に)... – aschipfl

+0

Whoa @aschipflはクールです。私はsubstが文字以外の文字を使うことができるのか分からなかった。 (Amiga 'assign'のヒント(http://wiki.amigaos.net/wiki/AmigaOS_Manual:_AmigaDOS_Command_Reference#ASSIGN)これはどんな長さでもかまいませんが毎日それが恋しいです)ありがとう! –

+0

'subst'はUNCパスと一緒に動作するように見えます(予期せず)。とにかく、本当にすべてのドライブが同時に必要ですか? 1つまたはいくつかのドライブをマップし、それを破壊するループを使用するか、繰り返しが完了したときにはどうしますか?フリードライブ文字を安全に見つけるには、 'pushd" \\%ComputerName%\ ADMIN $ "'を使用し、その出力を 'for/F'で取り込むことができます。例えば、 – aschipfl

0

私はインスタンス\\server1\devため、net use出力に同じUNCパスのいくつかの複数の一時的なドライブマッピングを見ることができます:popdがでpushdと一緒に使用されていることを

OK   B:  \\server1\dev    Microsoft Windows Network 
OK   F:  \\server1\dev    Microsoft Windows Network 
OK   N:  \\server1\dev    Microsoft Windows Network 
OK   O:  \\server1\dev    Microsoft Windows Network 
OK   Q:  \\server1\dev    Microsoft Windows Network 

注意をリンクされたpushd "%~dp0" trick

@echo off 

    :: Create a temporary drive letter mapped to your UNC root location 
    ::       and effectively CD to that location 
pushd "%~dp0" 

    :: Do your work 
     :: launch executables directly 
something.exe parameters 
     :: aternatively, launch executables using START 
start "" something.exe parameters 

     :: IMPORTANT! launch batch files using CALL command 
     ::   to return from a called script to the calling one 
CALL something.BAT parameters 
CALL something.CMD parameters 

    :: Remove the temporary drive letter and return to your original location 
POPD 
+0

ええ、ポッドは、ドライブレターをリリースすることが重要です。私は途中で出ていて、ポップにはならないスクリプトをトラブルシューティングしていました。ネット使用量を見ると、私はまだ4文字以上の手紙があると思っていました。 (おばあちゃんはいつも怠け者の手が2回働くと言った...) –

関連する問題