【问题标题】:Splitting the parameter in a batch file multiple times多次拆分批处理文件中的参数
【发布时间】:2012-11-25 05:25:50
【问题描述】:

示例批处理执行:

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

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

第一个令牌 = /s

第二个令牌 = /v1.1

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

那么第三个token将再次使用逗号作为分隔符进行拆分

下面的代码使用空格、逗号等常用分隔符分割参数。

@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)中我将使用逗号作为分隔符再次拆分它并回显它。

【问题讨论】:

标签: batch-file arguments parameter-passing command-line-arguments


【解决方案1】:

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

分隔符

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-13
    • 2018-09-08
    • 2012-06-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多