2017-06-11 64 views
0

我錯過了Windows內部「超時」命令的更改嗎?爲什麼批處理文件中的命令「超時」突然不再工作?

我有一個批處理文件很長一段時間,現在顯示我的程序的版本號。我添加了超時命令以保持CMD窗口打開幾秒鐘。所以我的批處理文件現在看起來是這樣的:

context -version 
timeout 7 

這工作得很好,但因爲某些Windows更新(明顯),在CMD窗口直接關閉,彷彿超時命令不工作了。當我從一個CMD窗口啓動文件我得到一個消息:

d:\ CTX>超時7
嘗試 '超時--help' 以獲取更多信息。

該文件與我創建它時一樣,但行爲對我來說是新的。

那麼有人可以告訴我我在這裏怎麼了?

+1

超時仍在我的更新版本的Windows 10上的批處理文件中正常工作。也許嘗試添加-NOBREAK參數(只是冒險)或「超時/ T 7」 –

+0

將其更改爲讀取'timeout.exe 7'或'「%__ APPDIR __%timeout.exe」7「如果它能正常工作,就像我期望的那樣,你可能會發現你的腳本或另一個名爲'timeout'的可執行本地文件帶有不同的擴展名導致你的問題。 _(運行Magoo給出的命令也應該確定這種情況)_。 – Compo

回答

2

我相信你可能已經獲得了不同版本的timeout,因爲幫助提示--help是一個\*nixy樣式選項說明符。

嘗試,從提示

where /T timeout.* 

應該名單上的pathtimeout版本,並可以幫助找出流氓版本。

+0

謝謝,你說得對。在使用* where *命令後,我注意到幾周前安裝的cygwin64在system32之前的路徑中。我只是改變了秩序,現在它再次運作... – Koenich

2

TIMEOUT不是cmd.exe(Windows命令解釋器)的內部命令等FORDIR

這是一個外部命令,它表示控制檯應用程序位於Windows目錄%SystemRoot%\System32中。

上採用上面timeout沒有文件擴展名並沒有完整路徑,Windows命令解釋程序首先會搜索當前目錄timeout.*對具有環境變量PATHEXT列出的文件擴展名的文件。

如果沒有這樣的文件可以在當前目錄下找到,Windows命令解釋程序繼續在環境變量PATH 定義的目錄中PATHEXT列出的文件擴展名timeout.*搜索。

在Windows Vista和更高版本的Windows的系統PATH與定義:

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

由於這個原因,通常是先找到%SystemRoot%\System32\timeout.exe在批處理文件中使用剛剛timeout

但是,如果當前目錄中,有名字timeout.*其在環境變量PATHEXT也列出的文件擴展名,或路徑的文件是由它把其他目錄路徑後開始,而不是安裝在本地或系統範圍的重新定義在最後附加它們,其中一個目錄也包含一個timeout.*文件,Windows命令解釋程序運行此可執行文件或腳本。

  1. 使用批處理文件%SystemRoot%\System32\timeout.exe,因爲這時Windows命令解釋器不能搜索該可執行文件,它不能發生錯誤timeout被錯誤地執行,除了:

    爲解決這一問題的建議環境變量SystemRoot在本地被修改,這與操作相比是非常不可能的。

  2. 打開Windows 控制面板 - 系統 - 高級系統設置(在左邊藍色鏈接),選擇選項卡高級,點擊按鈕環境變量...,搜索在下半部中的列表系統變量路徑,選擇這個環境變量,點擊編輯,並將%SystemRoot%\system32左邊或上面的所有目錄路徑(取決於Windows版本)移動到目錄列表的末尾。

  3. 請到修改系統PATH,在開始,而不是在有關Windows 系統PATH的這個錯誤變更結束追加他們插入自己的目錄路徑的應用程序或軟件捆綁的作者報告。

由於Magoo已經寫到:一個timeout.*移植從Unix到Windows,因爲輸出幫助聲明的Windows計算機上明顯執行。要獲得Windows上命令的幫助,命令必須通過參數/?執行,而不是在Unix上執行-h--help

+0

一個非常詳細和翔實的答案。非常感謝你。 – Koenich

相關問題