相关疑难解决方法(0)

有没有办法在批处理文件中指出最后n个参数?

在以下示例中,我想从父批处理文件中调用子批处理文件,并将所有剩余参数传递给子代.

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吗?

parameters shell cmd

40
推荐指数
4
解决办法
3万
查看次数

循环通过类似开关的参数的批处理文件?

我正在尝试遍历我传递给批处理文件的参数.根据参数,我想设置一个变量标志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"

for-loop dos batch-file

9
推荐指数
2
解决办法
1万
查看次数

标签 统计

batch-file ×1

cmd ×1

dos ×1

for-loop ×1

parameters ×1

shell ×1