假设我将一些参数从命令行传递到批处理脚本。 赞:myfile.bat flower, tree, doge, cate, house
但参数列表的长度是动态的,而不是所有的时间。 我怎样才能从n到所有参数。 例如,如果n是2,我应该写些什么来获得doge,cate,house。 根据评论问题编辑。将从命令行传递的所有参数从特定索引传递到最终批处理脚本
回答
@ECHO OFF
SETLOCAL
SET /a skipargs=2
SET "destvar=somevarname"
CALL :getargs %*
SET somevarname
SET /a skipargs=1
SET "destvar=somevarname"
CALL :getargs %*
SET somevarname
GOTO :EOF
:getargs
IF %skipargs% gtr 0 SET /a skipargs-=1&shift&GOTO getargs
SET "%destvar%="
:getargsl
IF DEFINED %destvar% (CALL SET "%destvar%=%%%destvar%%% %1"
) ELSE (
SET "%destvar%=%1"
)
SHIFT
IF "%~1" neq "" GOTO getargsl
GOTO :eof
这应该说明如何所有ARGS第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
尽管这段代码可以解决这个问题,但[包括解释](// meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)确实有助于提高您的帖子的质量。请记住,您将来会为读者回答问题,而这些人可能不知道您的代码建议的原因。也请尽量不要用解释性注释来挤占代码,这会降低代码和解释的可读性! – kayess
这似乎稍微简单一些,(至少对我来说)。
@Echo Off
Set "n=2"
For /F "Tokens=%n%*" %%A In ("%*") Do Set "remainder=%%B"
Echo(%remainder%
Timeout -1
变化变量n的两个行上的值按需要
恐怕这是错误地解析参数,因为for/F不能正确处理引用'“”';此外,还有以下参数分隔符:*空格*,* tab *,',',';','='和*非空格*(代码0xFF)... – aschipfl
不要害怕......我的答案完全符合所问的问题,我甚至检查过预编辑的版本。它也应该与'花',t; ree,'doge',ca; te,ho = use'完美配合。如果我没有弄错,这意味着你的上面的评论是完全错误的,因为它包含了一个逗号。我接受有些情况下我的答案不适合,但它在问题的参数范围内100%有效。 – Compo
你的方法将'floer'解析为两个单独的项目 - ''flo'和'wer'';然而,由于引用,'cmd'将'flo'视为一个参数;这就是我所指的;当然你的代码适用于这个问题的例子,但它可能会在真实情况下失败...... – aschipfl
下面是一个使用for
遍历%*
一个选项(这将显示所有,但第一_NUMSKIP
参数):
@echo off
set /A "_NUMSKIP=2"
set /A "INDEX=0"
for %%A in (%*) do (
set /A "INDEX+=1"
setlocal EnableDelayedExpansion
if !INDEX! GTR %_NUMSKIP% (
endlocal
echo(%%A
) else endlocal
)
请注意,这不是对所有字符串安全的;例如,自变量&"&"
会导致语法错误!
收集在一个单行其余的参数供以后转移到可执行文件,这会有所帮助:
@echo off
set /A "_NUMSKIP=2"
set /A "INDEX=0" & set "ARGS= "
for %%A in (%*) do (
set /A "INDEX+=1"
set "ARGV=%%A"
setlocal EnableDelayedExpansion
if !INDEX! GTR %_NUMSKIP% (
for /F "delims=" %%B in (^""!ARGS!!ARGV!"^") do (
endlocal
set "ARGS=%%~B "
)
) else endlocal
)
setlocal EnableDelayedExpansion
echo(!ARGS:~1,-1!
endlocal
需要注意的是原始的参数分隔符替换成为由单一的SPACE每个。
这错误地解析了参数,使用这个''花',t; ree,“doge”,ca; te,ho = use'来看看。它的输出是'ree' doge“ca te ho use',其中每个空格表示一个新行。然而,我并不期望所有答案都能与任何一组未知输入参数完美配合。顺便说一句,使用n = 2的另外两个答案也不适用于上面的输入! – Compo
@Compo,这里的解析是正确的,在单独行中的'echo'输出只是显示参数;当然,他们可以重新收集到一个单一的变量或输出在一个单一的行 - 见[编辑答案](http://stackoverflow.com/revisions/41018823/2)... – aschipfl
感谢(不合理)下来-投票... – aschipfl
- 1. 将命令行参数从powershell脚本传递到python脚本
- 2. 从批处理脚本传递参数到PowerShell脚本失败
- 3. 从windows批处理脚本传递参数到powershell脚本
- 4. 将参数从批处理文件传递到MYSQL脚本
- 5. 从AppleScript传递多个参数到终端命令脚本
- 6. 如何将参数从windows批处理脚本传递给java
- 7. 如何从批处理文件传递参数到Perl脚本
- 8. 将参数传递到传递到批处理文件的VBS脚本中
- 9. 无法将命令行参数传递给批处理文件
- 10. 将SLURM批处理命令行参数传递给R
- 11. 如何将命令行特定参数传递给批处理文件?
- 12. 从命令行将参数传递给R脚本
- 13. 传递命令行参数uwsgi脚本
- 14. 如何将命令从Shell脚本传递到命令行
- 15. 将参数从jenkins参数化构建传递给windows批处理命令
- 16. 传递批处理参数
- 17. 将命令行参数传递给bash脚本命令
- 18. 如何将Hudson/Jenkins参数传递给Windows批处理命令
- 19. 传递参数的shell脚本命令
- 20. 将参数传递给vb脚本的批处理文件
- 21. 从URL传递参数到mailto命令
- 22. 将ThisScriptsDirectory作为参数传递到Powershell从批处理
- 23. 传递命令行参数以及从STDIN输入Perl脚本?
- 24. 无法从perl脚本传递参数到dir命令
- 25. Linux:如何将命令行参数传递给传递给脚本的命令行参数?
- 26. 从参数中传递变量从vbscript到批处理文件
- 27. 如何将参数(不是命令行参数)传递给批处理脚本中的函数
- 28. 将参数从shell脚本传递到Python脚本,而无需在命令行上指定参数
- 29. Unix/Windows脚本帮助:将命令行参数从Windows传递到Unix
- 30. 传递命令行参数
什么是真正的问题?你想要最后一个'n'的参数,从'n'到'最后一个',还是什么? – elzooilogico
是的,从n到最后 – TBogdan