Tob*_*oby 32 arguments loops batch-file command-line-arguments
我有一个包含多个参数的批处理脚本.我正在读取它们的总数,然后像这样运行for循环:
@echo off
setlocal enabledelayedexpansion
set argCount=0
for %%x in (%*) do set /A argCount+=1
echo Number of processed arguments: %argCount%
set /a counter=0
for /l %%x in (1, 1, %argCount%) do (
set /a counter=!counter!+1 )
Run Code Online (Sandbox Code Playgroud)
我现在想做的是使用我的运行变量(x或counter)来访问输入参数.我在想这样的事情:
REM Access to %1
echo %(!counter!)
Run Code Online (Sandbox Code Playgroud)
在理想的世界中,这一行应该打印出我的第一个命令行参数,但显然它没有.我知道我对%操作员做错了什么,但无论如何我可以访问我这样的论点吗?
//编辑:只是为了清楚 - 问题在于它%(!counter!)为我提供了变量的值counter.counter=2它的意义给了我2而不是内容%2.
Aac*_*ini 47
@echo off
setlocal enabledelayedexpansion
set argCount=0
for %%x in (%*) do (
set /A argCount+=1
set "argVec[!argCount!]=%%~x"
)
echo Number of processed arguments: %argCount%
for /L %%i in (1,1,%argCount%) do echo %%i- "!argVec[%%i]!"
Run Code Online (Sandbox Code Playgroud)
例如:
C:> test One "This is | the & second one" Third
Number of processed arguments: 3
1- "One"
2- "This is | the & second one"
3- "Third"
Run Code Online (Sandbox Code Playgroud)
另一个:
C:> test One Two Three Four Five Six Seven Eight Nine Ten Eleven Twelve etc...
Number of processed arguments: 13
1- "One"
2- "Two"
3- "Three"
4- "Four"
5- "Five"
6- "Six"
7- "Seven"
8- "Eight"
9- "Nine"
10- "Ten"
11- "Eleven"
12- "Twelve"
13- "etc..."
Run Code Online (Sandbox Code Playgroud)
Jay*_*lor 17
:loop
@echo %1
shift
if not "%~1"=="" goto loop
Run Code Online (Sandbox Code Playgroud)
npo*_*aka 12
这是访问第二个(例如)参数的一种方法(这可以放入for/l循环):
@echo off
setlocal enableDelayedExpansion
set /a counter=2
call echo %%!counter!
endlocal
Run Code Online (Sandbox Code Playgroud)
所以:
setlocal enableDelayedExpansion
set /a counter=0
for /l %%x in (1, 1, %argCount%) do (
set /a counter=!counter!+1
call echo %%!counter!
)
endlocal
Run Code Online (Sandbox Code Playgroud)
如果要使代码简短而不是明智,那么
for %%x in (%*) do (
echo Hey %%~x
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
40748 次 |
| 最近记录: |