在以下示例中,我想从父批处理文件中调用子批处理文件,并将所有剩余参数传递给子代.
C:\> parent.cmd child1 foo bar
C:\> parent.cmd child2 baz zoop
C:\> parent.cmd child3 a b c d e f g h i j k l m n o p q r s t u v w x y z
Run Code Online (Sandbox Code Playgroud)
在parent.cmd中,我需要从参数列表中删除%1,并仅将剩余参数传递给子脚本.
set CMD=%1
%CMD% <WHAT DO I PUT HERE>
Run Code Online (Sandbox Code Playgroud)
我已经调查过使用SHIFT和%*,但这不起作用.当SHIFT将位置参数向下移动1时,%*仍然指向原始参数.
有人有主意吗?我应该放弃并安装Linux吗?
我正在尝试遍历我传递给批处理文件的参数.根据参数,我想设置一个变量标志true或false,以便稍后在脚本中使用
所以我的命令是"myscript.bat/u/p/s"
我的代码是:
FOR /f %%a IN ("%*") DO (
IF /I "%%a"=="/u" SET UPDATE=Y
IF /I "%%a"=="/p" SET PRIMARY=Y
IF /I "%%a"=="/s" SET SECONDARY=Y
)
Run Code Online (Sandbox Code Playgroud)
它只有在我有一个参数时才有效,它告诉我它将整个参数列表作为单个参数.我试过"delims ="但无济于事.获得每个间隔参数的任何想法?
如何为其中一个参数添加一个值?
myscript.bat/u/p/d TEST/s
:loop
IF "%~1"=="" GOTO cont
IF /I "%~1"=="/u" SET UPDATE=Y
IF /I "%~1"=="/p" SET PRIMARY=Y
IF /I "%~1"=="/s" SET SECONDARY=Y
IF /I "%~1"=="/d" SHIFT & SET DISTRO="%~1"
SHIFT & GOTO loop
:cont
Run Code Online (Sandbox Code Playgroud)
但是与最后一个IF一致的SHIFT实际上并没有改变任何东西.DISTRO最终成为"/ d"而不是"TEST"