标题: [其他] 如何获取命令行的从2个开始的参数列表 [打印本页]
作者: flydream 时间: 2008-11-26 13:10 标题: 如何获取命令行的从2个开始的参数列表
我们知道%*是从第一个开始的参数列表. 那么我该如何获得从二个开始的参数列表呢.
%*好像不随这shift变化, 不知道怎么做快捷.
作者: Batcher 时间: 2008-11-26 14:58
C:\Test>test.bat 1 2 3
2 3- @echo off
- setlocal enabledelayedexpansion
- set a=%*
- set b=%1
- set c=!a:%b%=!
- set c=%c:~1%
- echo %c%
- pause
复制代码
作者: flydream 时间: 2008-11-26 16:03
这两行太难理解了
set c=!a:%b%=!
set c=%c:~1%
作者: pusofalse 时间: 2008-11-26 17:50
a.bat:- @echo Off & Setlocal
- For /l %%a in (2 1 9) do (Call Set "Params=%%Params%%%%%%a")
- Echo %Params%
- EndLocal
- Pause
复制代码
- E:\Documents and Settings\Administrator\Desktop>a 1 2 3 4 5 6 7 8 9
- 23456789
- Press any key to continue . . .
复制代码
作者: shqf 时间: 2008-11-26 18:47
- @echo off
- set a=%*
- set b=%a:* =%
- echo %b%
- pause
复制代码
6楼版主还真能找出错处,现结合7楼的思路修改如下:- @echo off
- setlocal enabledelayedexpansion
- call :loop "1 2" 1 2 3 1 11
- pause
- :loop
- set a=%*
- set b=!a:*%1 =!
- echo %b%
- goto :EOF
复制代码
作者: pusofalse 时间: 2008-11-26 19:53
楼上思路好开阔,不过还有一个错误:
a.bat "1 2" 3 4 5 6....
这个格式下就会出错了。第二个参数应该是3,而不是2"。
作者: 随风 时间: 2008-11-26 20:36
修正2楼一个不足之处,如果参数有和%1重复的就会出错。
如: call :loop 1 1 2 3 1 11
- @echo off
- setlocal enabledelayedexpansion
- call :loop 1 1 2 3 1 11
- pause
- :loop
- set a=%*
- set c=!a:*%1=!
- set c=%c:~1%
- echo %c%
- goto :EOF
复制代码
[ 本帖最后由 随风 于 2008-11-26 20:38 编辑 ]
作者: dishuo 时间: 2008-11-28 22:13
使用shift,可以摆脱9个参数的限制
@echo off
echo 多于9个参数
call :demo 1 2 3 4 5 6 7 8 9 10 11
echo 带引号
call :demo "a a" b c "d d" e
echo 相同字符组成
call :demo 1 1 11 1 1 11 111 1
pause
goto:eof
:demo
shift & echo ALL: %*
:lp
if {%1}=={} echo. & goto:eof
echo %1
shift & goto:lp
运行结果
多于9个参数
ALL: 1 2 3 4 5 6 7 8 9 10 11
2
3
4
5
6
7
8
9
10
11
带引号
ALL: "a a" b c "d d" e
b
c
"d d"
e
相同字符组成
ALL: 1 1 11 1 1 11 111 1
1
11
1
1
11
111
1
[ 本帖最后由 dishuo 于 2008-11-28 22:14 编辑 ]
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |