有沒有辦法在for循環中轉義問號以便下面的工作?cmd for loop escape?在設置?
for %%a in (%*) do (
for %%b in (/? /h /help -h -help --help) do if %%a==%%b goto usage
)
它會比單獨的if清潔得多。在單獨的if子句中%% a ==/^?作品,但不在這裏。
有沒有辦法在for循環中轉義問號以便下面的工作?cmd for loop escape?在設置?
for %%a in (%*) do (
for %%b in (/? /h /help -h -help --help) do if %%a==%%b goto usage
)
它會比單獨的if清潔得多。在單獨的if子句中%% a ==/^?作品,但不在這裏。
沒有辦法保存通配符*?在FOR(no/F)命令中,唯一的方法是通過FOR/F。請注意,在這種情況下,既FOR的問題存在,所以這種解決方案無法正常工作或:
for %%a in (%*) do (
if %%a == /? goto usage
if %%a == /h goto usage
. . . .
)
...除非,當然,/?參數沒有給出。
雖然有可能組裝一個循環來遍歷包括/?在內的多個開關,但結果代碼比單個IF更復雜。你可以試試這個方法,而不是:
setlocal EnableDelayedExpansion
set params=%*
if "%params:/?=%" neq "%params%" goto usage
for %%b in (/h /help -h -help --help) do if "!params:%%b=!" neq "%params%" goto usage
除了「PARAMS」變通失敗時%*是空的:如果你前綴%*用空格:set params= %*
,它不會在%params:/?=%"
空並且比較不會失敗。
這是一個很好的工作解決方案,除非參數是空的,if給出了「goto在這個時候是意想不到的」,不知道爲什麼?首先添加'if [%1] == [] goto usage'來檢查沒有參數,這很好。 – kilves76
是的,但是這樣寫:'if「%1」==「」goto usage'。這是做到這一點的標準方法... – Aacini
不錯的解決方法!至於'if「%1」==「」',如果'%1'本身用雙引號括起來,它可能不會奏效。 '如果「%〜1」==「」'可能會更好。 –