Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 多次拆分批处理文件中的参数_Batch File_Arguments_Parameter Passing_Command Line Arguments - Fatal编程技术网

Batch file 多次拆分批处理文件中的参数

Batch file 多次拆分批处理文件中的参数,batch-file,arguments,parameter-passing,command-line-arguments,Batch File,Arguments,Parameter Passing,Command Line Arguments,批处理执行示例: 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 _PARAM

批处理执行示例:

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

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

分隔符

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

  • 逗号(“,”)替换为空格,除非它们是字符串的一部分 双引号
  • 分号(;)替换为空格,除非 是双引号中字符串的一部分
  • “=”字符有时是 替换为空格,如果它们是双引号中字符串的一部分,则不替换
  • 第一个正斜杠(“/”)仅在 立即跟随命令,不带前导空格
  • 多个空间将替换为单个空间,除非它们是空间的一部分 双引号中的字符串
  • 选项卡由单个空格替换
  • 忽略第一个命令行参数之前的前导空格
我知道有几次这些看似无用的“功能”被证明是非常有用的 方便的不过,请记住,这些“特性”可能会随时间而变化 使用的操作系统

有关命令行解析的更多信息,请参见路径和 (特别是对于用户的交互式示例)页面


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

分隔符

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

  • 逗号(“,”)替换为空格,除非它们是字符串的一部分 双引号
  • 分号(;)替换为空格,除非 是双引号中字符串的一部分
  • “=”字符有时是 替换为空格,如果它们是双引号中字符串的一部分,则不替换
  • 第一个正斜杠(“/”)仅在 立即跟随命令,不带前导空格
  • 多个空间将替换为单个空间,除非它们是空间的一部分 双引号中的字符串
  • 选项卡由单个空格替换
  • 忽略第一个命令行参数之前的前导空格
我知道有几次这些看似无用的“功能”被证明是非常有用的 方便的不过,请记住,这些“特性”可能会随时间而变化 使用的操作系统

有关命令行解析的更多信息,请参见路径和 (特别是对于用户的交互式示例)页面


可能是重复的事实上,是我问的。这是一个与第一个不同的场景,因为我现在必须将其拆分多次如果您的第一个问题。。。请注意,你没有接受也没有回答这个问题,但半小时后发布了一个完全类似的新问题。可能是重复的事实上,是我问的。这是一个与第一个不同的场景,因为我现在必须将其拆分多次如果您的第一个问题。。。请注意,您尚未接受或回答该问题,但半小时后发布了一个完全类似的新问题。