[英]Batch script loop to check for multiple parameters
好的,我一直在玩這個,但無法讓它為每個參數運行命令。
批處理文件運行方式
test.bat /r /a /c
完整的批次代碼
@echo on
SETLOCAL ENABLEEXTENSIONS
SETLOCAL ENABLEDELAYEDEXPANSION
:checkloop
set argtoken=1
FOR /F "Tokens=* delims=" %%G IN ("%*") DO (call :argcheck %%G)
pause
GOTO:END
:argcheck
if /i "%1"=="/r" set windows=1
if /i "%1"=="/a" set active=1
goto:eof
:end
"%*" 顯示所有參數,例如
/r /a /c
但是由於某種原因,無論我嘗試什么,我都無法讓 for 循環分解不同的參數並為每個參數運行:argcheck
。
更新:對於任何對這里感興趣的人來說,我最終都會這樣做。 我在幾個不同的腳本中實現它,它的工作令人驚嘆。 只需將它放在帶有調用函數和“%”的腳本中的某個位置,你應該會很好。 :) 如果您有任何問題,請發布。
@echo off
SETLOCAL ENABLEEXTENSIONS
SETLOCAL ENABLEDELAYEDEXPANSION
call:ArgumentCheck %*
echo %DebugMode%
echo %RestartAfterInstall%
pause
goto:eof
:ArgumentCheck
if "%~1" NEQ "" (
if /i "%1"=="/r" SET DebugMode=Yes & GOTO:ArgumentCheck_Shift
if /i "%1"=="/a" SET RestartAfterInstall=Yes & GOTO:ArgumentCheck_Shift
SET ArgumentCheck_Help=Yes
:ArgumentCheck_Shift
SHIFT
goto :ArgumentCheck
)
If "%ArgumentCheck_Help%"=="Yes" (
Echo An invalid argument has been passed, currently this script only supports
ECHO /r /a arguments. The script will continue with the arguments
ECHO you passed that is supported.
)
GOTO:EOF
:end
原因是 FOR/F 會將一行拆分為固定數量的令牌,名為 %%A、%%B、%%...(此處%%A 是第一個命名的令牌)。
但是當你使用空的delims=
時,即使這樣也行不通。
FOR /F "tokens=1-5 delims= " %%A in ("%*") do (
echo %%A, %%B, %%C, %%D, %%E
)
這會將您的行拆分為令牌,但它甚至會將令牌拆分為
One "two and three"
輸出:
One, "two, and, three",
使用SHIFT
和循環更容易。
:loop
if "%~1" NEQ "" (
call :argcheck
SHIFT
goto :loop
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.