2017-06-11 241 views
0

Windows内部の「タイムアウト」コマンドの変更がありませんでしたか?バッチファイル内のコマンド "タイムアウト"が突然機能しなくなるのはなぜですか?

私はプログラムのバージョン番号を表示するバッチファイルを長い時間持っています。 CMDウィンドウを数秒間開いたままにするためにtimeoutコマンドを追加しました。だから私のバッチファイルは次のようになります。

context -version 
timeout 7 

これがうまく働いたが、timeoutコマンドはもう動作しないかのように、いくつかのWindowsの更新プログラム(明らかに)以来、CMDウィンドウが直接閉じます。

D:私はCMDウィンドウからファイルを起動すると、私はメッセージを取得\ CTX>タイムアウト7
の詳細については、 'タイムアウト--help' を試してみてください。

ファイルは作成して以来のものですが、その動作は私には新しいものです。

だから、誰も私が間違ってここに何が起こっているか私に言うことができますか?

+1

更新されたバージョンのWindows 10のバッチファイルでタイムアウトが正常に動作している可能性があります.NOBREAKパラメータを追加してみてください(ちょっとしたチャンス)、または「タイムアウト/ T 7」 –

+0

'timeout.exe 7'または ''%__ APPDIR __%timeout.exe "7'期待通りにうまくいけば、あなたのスクリプトや異なる拡張子を持つ 'timeout'という別の実行可能なローカルファイルがあなたの問題を引き起こしていることがわかります。 _(Magooによって与えられたコマンドを実行すると、このシナリオも識別されるはずです)_。 – Compo

答えて

2

timeoutの別のバージョンを入手したと思われます。ヘルププロンプト--helpは、\*nixyスタイルオプション指定子です。 pathtimeoutバージョンを表示すべきであると、不正なバージョンを配置するのを助けることができるプロンプト

where /T timeout.* 

から

試します。

+0

ありがとうございます。 *コマンドを使った後、私は数週間前にインストールしたcygwin64がsystem32の前のパスにあることに気付きました。私はちょうど順序を変更しなければならなかった、そして今それは再び働く... – Koenich

2

TIMEOUTは FOR またはDIRようcmd.exe(Windowsコマンドインタプリタ)の内部コマンドではありません。

これは、Windowsディレクトリ%SystemRoot%\System32に位置しているコンソールアプリケーションを意味し、外部コマンドです。

ファイル拡張子なしと完全なパスなしでちょうどtimeoutの使用方法については、Windowsのコマンド・インタープリターは、環境変数PATHEXTに記載されているファイルの拡張子を持つファイルをtimeout.*でカレントディレクトリに最初に検索します。

そのようなファイルがカレントディレクトリに見つからない場合は、Windowsのコマンド・インタプリタは環境変数PATH で定義されたディレクトリにPATHEXTに記載されているファイル拡張子を持つtimeout.*の検索を続けます。それは通常、バッチファイルでちょうどtimeoutを使用して最初の%SystemRoot%\System32\timeout.exeを発見されたそのため

%SystemRoot%\system32;%SystemRoot%\system32;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\; 

:Windows Vistaおよびそれ以降のバージョンのWindowsで

システムPATHがで定義されています。

しかし、現在のディレクトリは、環境変数PATHEXT、またはPATHが始まるの代わりに他のディレクトリパスを入れ、インストーラによってローカルに再定義やシステム全体のたにも記載されているファイルの拡張子を持つ名前timeout.*を持つファイルが含まれている場合これらのディレクトリの1つにtimeout.*ファイルも含まれている場合、Windowsのコマンドインタープリタはこの実行可能ファイルまたはスクリプトを実行します。

この問題を解決するための提案:バッチファイル%SystemRoot%\System32\timeout.exe

  1. 使用し、Windowsのコマンド・インタプリタは、この実行ファイルを検索してはいけない、間違ったtimeoutを除いて、誤って実行されることが起こりできないため、環境変数SystemRootはローカルで変更されており、PATHの操作と比較してはほとんどありません。

  2. 開き、Windowsのコントロールパネル - システム - システムの詳細設定(左側の青いリンク)、選択タブアドバンストのリストで下半分にボタン環境変数...、検索をクリックしてくださいシステム変数のパスに設定し、を編集してを編集し、%SystemRoot%\system32の左または上のすべてのディレクトリパス(Windowsバージョンに依存)をディレクトリリストの末尾に移動します。

  3. システムのPATHを変更し、開始の代わりに、WindowsのシステムPATHのこの間違った変更についての末尾に追加で彼らのディレクトリパスを挿入するアプリケーションやソフトウェア・バンドルの作者に報告してください。 Magooとして

すでに書いた:UnixのからWindowsに移植されtimeout.*が明らかため、出力のヘルプ文のWindowsマシン上で実行されます。 Windows上でコマンドのヘルプを表示するには、コマンドは通常、パラメータ/?で実行する必要があり、Unixでは-hまたは--helpで実行する必要はありません。

+0

非常に詳細で有益な答え。どうもありがとうございました。 – Koenich

関連する問題