Nic*_* W. 2 windows dos batch-file
好吧,我一直在玩这个,但无法让它为每个参数运行命令.
批处理文件运行为
test.bat /r /a /c
Run Code Online (Sandbox Code Playgroud)
完整批代码
@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
Run Code Online (Sandbox Code Playgroud)
"%*"显示所有参数,例如
/r /a /c
Run Code Online (Sandbox Code Playgroud)
但由于某些原因,无论我尝试什么,我都无法让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
Run Code Online (Sandbox Code Playgroud)
jeb*_*jeb 10
原因是FOR/F会将一行拆分为一个名为%% A,%% B,%%的标记的固定计数...(%% A这里是第一个命名的标记).
但是当你使用空时,delims=即使这样也行不通.
FOR /F "tokens=1-5 delims= " %%A in ("%*") do (
echo %%A, %%B, %%C, %%D, %%E
)
Run Code Online (Sandbox Code Playgroud)
这会将你的行划分为令牌,但它甚至会分割令牌
One "two and three"
Run Code Online (Sandbox Code Playgroud)
输出:
One, "two, and, three",
Run Code Online (Sandbox Code Playgroud)
它更容易使用SHIFT和循环.
:loop
if "%~1" NEQ "" (
call :argcheck
SHIFT
goto :loop
)
Run Code Online (Sandbox Code Playgroud)