Batch file 将命令行中从特定索引传递的所有参数引用到最终批处理脚本
假设我正在将一些参数从命令行传递给批处理脚本。 比如:Batch file 将命令行中从特定索引传递的所有参数引用到最终批处理脚本,batch-file,cmd,args,Batch File,Cmd,Args,假设我正在将一些参数从命令行传递给批处理脚本。 比如:myfile.bat花、树、狗、美食、房子 但是参数列表的长度是动态的,而不是一直为5。 如何获取从n到最后的所有参数。 例如,如果n是2,我应该写什么才能得到doge,cate,house。 根据评论问题进行编辑。@ECHO OFF SETLOCAL 设置/a滑雪场=2 设置“destvar=somevarname” 呼叫:getargs%* 设置somevarname 设置/a滑雪场=1 设置“destvar=somevarname” 呼
myfile.bat花、树、狗、美食、房子
但是参数列表的长度是动态的,而不是一直为5。
如何获取从n到最后的所有参数。
例如,如果n是2,我应该写什么才能得到doge,cate,house。
根据评论问题进行编辑。@ECHO OFF
SETLOCAL
设置/a滑雪场=2
设置“destvar=somevarname”
呼叫:getargs%*
设置somevarname
设置/a滑雪场=1
设置“destvar=somevarname”
呼叫:getargs%*
设置somevarname
后藤:EOF
:getargs
如果%skippargs%gtr 0集/a skippargs-=1&shift&GOTO getargs
设置“%destvar%”
:getargsl
如果定义了%destvar%(调用集“%destvar%%=%%%destvar%%%1”
)否则(
设置“%destvar%”=%1
)
移位
如果“%~1”neq“转到getargsl
后藤:eof
这应该演示如何将第n个之后的所有参数分配给一个变量。试试看
@echo off
set/a skip=1 & rem set skip to the number of arguments to forget
for /L %%i in (1,1,%skip%) do shift & rem skip arguments
:getArg
echo %~1 & shift
if "%~1" neq "" goto :getArg
exit/B
这似乎有点简单,(至少对我来说)
@Echo关闭
设置“n=2”
对于(“%*”)中的/F“令牌=%n%*”%%A,请设置“余数=%%B”
回音(剩余百分比%)
超时-1
根据需要更改第二行变量n的值这里有一个选项,使用
进行%*
循环(这将显示除第一个\u NUMSKIP
参数外的所有参数):
@echo关闭
设置/A“\u NUMSKIP=2”
设置/A“索引=0”
对于%%A in(%*)do(
设置/A“索引+=1”
setlocal EnableDelayedExpansion
如果!索引!全球技术法规%\u NUMSKIP%(
端部
回声(%%A
)else endlocal
)
请注意,这对所有字符串都不安全;例如,参数&“&”
会导致语法错误
要收集单行中的剩余参数,以便稍后传输到可执行文件,这有助于:
@echo关闭
设置/A“\u NUMSKIP=2”
设置/A“INDEX=0”和设置“ARGS=”
对于%%A in(%*)do(
设置/A“索引+=1”
设置“ARGV=%%A”
setlocal EnableDelayedExpansion
如果!索引!全球技术法规%\u NUMSKIP%(
对于/F“delims=“%%B in(^”“!ARGS!!ARGV!”^”)执行以下操作(
端部
设置“ARGS=%%~B”
)
)else endlocal
)
setlocal EnableDelayedExpansion
回声(!ARGS:~1,-1!
端部
请注意,原始的参数分隔符将被每个分隔符替换为一个空格。真正的问题是什么?您想要最后的n
参数,从nn
到last
一,还是什么?是的,确切地说,从n到last我担心这会错误地解析参数,因为for/F
不处理引号“
正确;此外,还有以下参数分隔符:空格、制表符、、、;
、=
和非中断空格(code0xFF
)……别害怕……我的答案与所问的问题非常吻合,我甚至检查了预编辑的版本。它也应该与的“flower”配合得很好,t;ree,“doge”,ca;te,ho=use
。如果我没有弄错的话,这意味着你的上述评论是完全错误的,因为它包含两个逗号。我承认,在某些情况下,我的答案不合适,但它在问题的参数范围内100%有效。你的方法解析“flower”
作为两个单独的项目--“flo
和wer”
;但是,cmd
将视为“flo-wer”
作为引用的一个参数;这就是我所指的;当然,你的代码适用于这个问题的示例,但在现实生活中可能会失败……这解析了错误的参数,使用这个“flower”,t;ree,“doge”,ca;te,ho=use
。它的输出是ree“doge”可以使用
,其中每个空格表示新行。但是,我不希望所有答案都能与任何一组未知的输入参数完美配合。顺便说一句,使用n=2的其他两个答案也不能与上述输入配合使用!@Compo,这里的解析是正确的,在单独的行中,echo
输出只是为了显示参数nts;当然,它们可以被重新收集到单个变量中,也可以在一行中输出——请参阅……虽然此代码片段可以解决问题,但确实有助于提高您文章的质量。请记住,您将为将来的读者回答此问题,而这些人可能不知道您提出代码建议的原因。请也不要用解释性的注释挤满你的代码,这会降低代码和解释的可读性!