Board logo

标题: [其他] 如何获取命令行的从2个开始的参数列表 [打印本页]

作者: flydream    时间: 2008-11-26 13:10     标题: 如何获取命令行的从2个开始的参数列表

我们知道%*是从第一个开始的参数列表. 那么我该如何获得从二个开始的参数列表呢.
%*好像不随这shift变化, 不知道怎么做快捷.
作者: Batcher    时间: 2008-11-26 14:58

C:\Test>test.bat 1 2 3
2 3
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set a=%*
  4. set b=%1
  5. set c=!a:%b%=!
  6. set c=%c:~1%
  7. echo %c%
  8. pause
复制代码

作者: flydream    时间: 2008-11-26 16:03

这两行太难理解了
set c=!a:%b%=!
set c=%c:~1%
作者: pusofalse    时间: 2008-11-26 17:50

a.bat:
  1. @echo Off & Setlocal
  2. For /l %%a in (2 1 9) do (Call Set "Params=%%Params%%%%%%a")
  3. Echo %Params%
  4. EndLocal
  5. Pause
复制代码
  1. E:\Documents and Settings\Administrator\Desktop>a 1 2 3 4 5 6 7 8 9
  2. 23456789
  3. Press any key to continue . . .
复制代码

作者: shqf    时间: 2008-11-26 18:47

  1. @echo off
  2. set a=%*
  3. set b=%a:* =%
  4. echo %b%
  5. pause
复制代码

6楼版主还真能找出错处,现结合7楼的思路修改如下:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. call :loop "1 2" 1 2 3 1 11
  4. pause
  5. :loop
  6.   set a=%*
  7.   set b=!a:*%1 =!
  8.   echo %b%
  9. 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
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. call :loop 1 1 2 3 1 11
  4. pause
  5. :loop
  6.   set a=%*
  7.   set c=!a:*%1=!
  8.   set c=%c:~1%
  9.   echo %c%
  10. 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