適用於XP使用的timeout.exe

Windows從Vista以後增添了獨立的批次檔工具程式 timeout.exe

可以用於批次檔中取代內建命令 pause 的功能,

 於批次檔裏除了等候按鍵外也能指定秒數提供延遲的需求

Usage:

TIMEOUT [/T] timeout [/NOBREAK]

描述:

    這個公用程式接受逾時參數,等候指定的時間長度

    (單位是秒數) 或等到按了鍵以後。

    它同時也接受參數。

參數清單:

    /T        timeout       指定等候的秒數。

                            有效範圍介於 -1 和 99999 秒之間。

    /NOBREAK                略過按鍵,等候指定的時間長度。

    /?                      顯示這個說明訊息。

注意事項: 等候逾時的值如果是 -1 則表示一直等候按鍵。

範例:

    TIMEOUT /?

    TIMEOUT /T 10

    TIMEOUT /T 300 /NOBREAK      <== 不接受按鍵中斷

    TIMEOUT /T -1                <== 跟 pause 是一樣的意思

Windows XP雖然沒有提供這個功能, 且Win 10, Win 7裏的拿來給XP也不能用,

不過更舊一點的Windows Server 2003提供的版本則是兼容的, 可以提出來複製給XP使用,

雖然這種程式自寫很容易, 20年前也寫過, 不過既然有微軟的版本還是直接拿來用,

感覺比較有一致性, 這邊只提供32位元的版本:  timeout.rar

因為XP 64位元是個很難用的系統, 應該已不存在於這個甚麼都在線的世界中...

同樣的 forfiles.rar 則是相容XP由Server 2003提取出來的 forfiles 批次檔工具程式

Usage:

FORFILES [/P pathname] [/M searchmask] [/S]

         [/C command] [/D [+ | -] {yyyy/mm/dd | dd}]

描述:

    選取一個檔案 (或一組檔案),並在檔案上

    執行命令。這對批次工作很有幫助。

參數清單:

    /P    pathname      表示要開始搜尋的路徑。

                        預設資料夾是目前的

                        目錄 (.)。

    /M    searchmask    根據 searchmask 搜尋檔案。

                        預設的 searchmask 是 '*'。

    /S                  指示 forfiles 遞迴搜尋

                        子目錄。例如 "DIR /S"。

    /C    command       表示每個檔案要執行的命令。

                        命令字串應該包含在雙括號

                        之間。

                        預設的命令是 "cmd /c echo @file"。

                        下列變數可以使用於命令字串:

                        @file    - 傳回檔案的名稱。

                        @fname   - 只傳回檔案的名稱,

                                   不傳附檔名。

                        @ext     - 只傳回檔案的

                                   附檔名。

                        @path    - 傳回檔案的完整路徑。

                        @relpath - 傳回檔案的相對

                                   路徑。

                        @isdir   - 如果檔案類型是目錄的話,        (留意最後的說明)

                                   傳回 "TRUE",如果是檔案

                                   的話,傳回 "FALSE"。

                        @fsize   - 傳回檔案的大小,

                                   單位是位元組。

                        @fdate   - 傳回檔案上次修改的

                                   日期。

                        @ftime   - 傳回檔案上次修改

                                   的時間。

                        要在命令列中包含特殊字元的話,

                        請使用 0xHH 格式的十六

                        進位字元碼 (例如 0x09 代表 tab)。

                        內部的 CMD.exe 命令應該

                        以 "cmd /c" 執行。

    /D    date          選取檔案上次修改的時間大於、

                        等於 (+) 或小於或等於 (-)、

                        使用 "yyyy/mm/dd" 格式表示指定的日期;

                        或選取檔案日期上次修改

                        的時間大於或等於 (+)

                        目前的日期再加上"dd" 天、

                        小於或等於 (-) 目前的日期減去 "dd" 天。

                        有效的 "dd" 可以是介於

                        0 - 32768 之間的數字。

                        如果未指定,"+" 將被視為預設符號。

    /?                  顯示這個說明訊息。

範例:

    FORFILES /?

    FORFILES

    FORFILES /P C:\WINDOWS /S /M DNS*.*

    FORFILES /S /M *.txt /C "cmd /c type @file | more"

    FORFILES /P C:\ /S /M *.bat

    FORFILES /D -30 /M *.exe        (不是真的換行,便於觀看)

             /C "cmd /c echo @path 0x09 was changed 30 days ago"

    FORFILES /D 2001/01/01          (不是真的換行,便於觀看)

             /C "cmd /c echo @fname is new since Jan 1st 2001"

    FORFILES /D +2020/12/5 /C "cmd /c echo @fname is new today"

    FORFILES /M *.exe /D +1

    FORFILES /S /M *.doc /C "cmd /c echo @fsize"

    FORFILES /M *.txt /C "cmd /c if @isdir==FALSE notepad.exe @file"

於XP上要留意一下 @isdir 的內容值, 如果是用 command.exe 會回應 'TRUE' 或 'FALSE'

而於顯示中文的 cmd.exe 裏使用的話, @isdir 的內容值則是回應 '' 或 ''

有用到時最好於實際環境試一下這樣的命令秀出來看看確認一下

forfiles /M * /C "cmd /c echo @file IsDir=[@isdir]"

如果不是, 那麼使用說明中的的最後一個範例要調整如下

FORFILES /M *.txt /C "cmd /c if [@isdir]==[偽] notepad.exe @file"

由於是以判斷相等的方式在運用, 不論是中文或大小寫都必需要完全一致才會相符