web-dev-qa-db-ja.com

CMDはUNCパスを現在のディレクトリとしてサポートしていません

正常に動作しているように見えるバッチスクリプトがありますが、そのうちの1つを編集していくつかの新しい作業を含め、手動でスクリプトを実行すると(Windowsエクスプローラーからダブルクリックして)、スクリプト内のpushdコマンドを実行するたびに上記のエラーメッセージが表示されます遭遇した。これらは、年のドット以降に存在するプッシュされたコマンドであり、スクリプトは正常に実行されています。手動で実行するバッチスクリプトとスケジューラーによって開始されるバッチスクリプトに違いはありますか?手動で実行しているときにエラーメッセージを無効にするにはどうすればよいですか(可能な場合)。

5
Nelson

バッチファイルcmd.exeをダブルクリックすると、オプション/Cを暗黙的に使用して開始され、バッチファイルの実行終了後にコマンドプロセスを閉じ、バッチファイルのディレクトリを現在のディレクトリとして設定します。

ダブルクリックしたバッチファイルがネットワーク共有上にあり、ネットワーク共有をドライブ文字にマッピングせずにUNCパスを使用してネットワークドライブを使用する場合、cmd.exeは、現在のディレクトリがサポートされていないためUNCパスであることをユーザーに通知し、 %SystemRoot%(Windowsディレクトリ)を現在のディレクトリとして設定します。

バッチファイルが任意のディレクトリから実行されるように設計されている場合、つまり、バッチファイルのディレクトリが現在のディレクトリである必要がない場合は、警告を無視できます。優れたコード化されたバッチファイル、特にWindowsタスクスケジューラによって実行されるファイルは、現在のディレクトリであればどのディレクトリでも実行できます。

スケジュールされたタスクとしてバッチファイルを実行すると、タスクスケジューラは、コマンドを実行する前に%SystemRoot%\System32(Windowsシステムディレクトリ)を現在のディレクトリとして設定します。ただし、特定のディレクトリパスが、スケジュールされたタスクのプロパティでstart in directoryとして明示的に設定されています。

関連項目: コマンドセッションの汎用名前付け規則(UNC)チェックを無効にするにはどうすればよいですか?

UNCパスを現在のディレクトリとして使用してバッチファイルを実行するためのサポートを有効にすると、一部のコンソールアプリケーションは、その環境用に設計されていないために実行に失敗する可能性があることに注意してください。

スケジュールされたタスクとして実行するように設計されたバッチファイルを使用している場合、質問に答えて私がリストに記載したすべての側面を考慮に入れます バッチファイルをスケジュールされたタスクとして実行する際に何を考慮する必要がありますか? 、UNCパスを使用してバッチファイルをダブルクリックしても、この警告メッセージは無視できます。

もちろん、次のプロパティでStart inを使用してこのショートカットを介してバッチファイルを開始するために、バッチファイルのショートカットファイル(* .lnk)を作成することもできます。 Windowsタスクスケジューラがデフォルトで行うように、ショートカットファイルは%SystemRoot%\System32に設定されています。

1
Mofi

アドバイスがあります。PowerShellでスクリプトを書き直すことを検討してください。 PowerShellでは、現在の作業ディレクトリをネットワーク上に置くことができます。 PowerShellは全体として、CMDよりも用途が広く強力です。また、クロスプラットフォームです。切り替えを検討してください。

1
Arsalan Kazmi