正如我剛剛發現的那樣,和 forSET的行為是不同的。我的實驗表明,的行為由啟動批處理檔案的擴展名(.bat 或 .cmd)決定,而不是由陳述句所在的檔案擴展名決定。.bat.cmdSETSET
這是 Windows NT CMD 批處理腳本引擎的一個模糊的角落,

uj5u.com熱心網友回復:
這并不讓我感到驚訝,盡管我之前從未測驗過這個特定點......
以下資訊來自我的個人經歷。據我所知,這在任何地方都沒有記錄
一個叫做 via 的“子程式”call subFile.bat就是我所說的internal subroutine。它從其父級繼承了幾個狀態,如“回聲開/關”等。現在,我知道它也繼承了“BAT|CMD”模式。
當然,內部子程式與其父程式共享的最知名的值是環境變數。
一個名為 via 的子程式cmd /C subFile.bat是一個外部子程式。當它啟動時,它有一組新的初始值,包括“BAT|CMD”模式。
看這個測驗:
啟動 SubBat.cmd
call ShowErr.bat
cmd /C ShowErr.bat
輸出:
Err=0
Err=40
開始-SubCmd.bat
call ShowErr.cmd
cmd /C ShowErr.cmd
輸出:
Err=40
Err=0
知道什么是“當前模式”的方法非常簡單:首先通過將 errorlevel 設定為 1 verify other 2>NUL(這是 MS 建議的方法),然后執行set var=1. 如果新的 %errorlevel% 為 1,則您處于 BAT 模式;如果為 0,則處于 CMD 模式。
call只是為了完成這個主題,通過其名稱執行的沒有或cmd /C命令(即只是)的“子程式”subFile.bat被稱為覆寫:它在各個方面都替換了呼叫程式。
當它們被放置在 BAT 或 CMD 檔案中時,更改它們修改 %errorlevel% 的方式的命令在此答案的表 3下進行了簡要描述。
uj5u.com熱心網友回復:
我建議 running .bat, theset保持errorlevel不變,但這已被“糾正”為.cmd設定errorlevel為 0set成功。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/445071.html
標籤:批处理文件
上一篇:asdf與bundler的區別
