0

示例批处理执行:

test.bat /s v1.1 1,3,4,5

我想使用空格作为分隔符将参数拆分为三个标记。结果应该是:

第一个令牌 = /s

第二个令牌 = /v1.1

第三个令牌 = 1,3,4,5

然后将使用逗号作为分隔符再次拆分第三个标记

下面的代码使用常见的分隔符(如空格、逗号等)拆分参数。

@ECHO OFF

SET PARAMS=

:_PARAMS_LOOP

SET PARAMS=%PARAMS%%1 
ECHO %1
SHIFT

IF NOT "%1"=="" GOTO _PARAMS_LOOP

执行:

test.bat /s v4.1 1,2,3,4

结果:

/s
v4.1
1
3
4
5

我只想使用空格作为分隔符,然后在第三个标记(1,3,4,5)中,我将使用逗号作为分隔符再次拆分它并回显它。

4

1 回答 1

3

问题是 cmd 将空格、制表符、逗号、分号或等号识别为命令行分隔符,除非它们用双引号引起来。

分隔符

批处理文件会忽略命令行中的某些字符,具体取决于 DOS 版本、是否“转义”,并且通常取决于它们在命令行中的位置:

  • 逗号 (",") 被空格替换,除非它们是双引号中字符串的一部分
  • 分号 (";") 被空格替换,除非它们是双引号中字符串的一部分
  • "=" 字符有时会被空格替换,而不是如果它们是双引号中字符串的一部分
  • 第一个正斜杠 ("/") 仅当它紧跟在命令后面时才被空格替换,没有前导空格
  • 多个空格被单个空格替换,除非它们是双引号中字符串的一部分
  • 制表符被单个空格替换
  • 第一个命令行参数之前的前导空格被忽略

我知道有好几次这些看似无用的“功能”被证明非常方便。但请记住,这些“功能”可能会因所使用的操作系统而异。

更多关于命令行解析的信息可以在 PATH 和 FOR(尤其是 FOR 的交互式示例)页面上找到。

http://www.robvanderwoude.com/parameters.php

于 2012-12-08T17:16:30.223 回答