繁体   English   中英

cmd-逗号分隔参数与空间相比?

[英]cmd- comma to separate parameters Compared to space?

在分隔参数时,我对这个主题有一些疑问,比较空格的逗号。

他们是熟悉cmd提示符的C程序员的问题,可能会对它们有所了解。

我知道这样做的时候

c:\>program a b c

有4个参数[0]=program [1]=a [2]=b [3]=c

根据hh ntcmds.chm概念..

壳概述

; and , are used to separate parameters

; or , command1 parameter1;parameter2  Use to separate command parameters.

我看到dir a,b给出与dir ab相同的结果

c:\\>program a,b,c给出参数[0] =程序[1] = a,b,c

一些人呢? 还是所有? windows命令使用; 而且,? 并且是在每个命令的代码中解释,还是像shell一样用空间完成?

如果它在每个命令的代码中......我怎么知道它做了什么? 我注意到explorer.exe的文档提到了逗号,例如你可以做explorer /e,.

但是DIR /? 没有提到它,但可以使用它。 并且一个典型的c程序根本不作为分隔符。所以shell不使用逗号分隔,它使用空格。 和windows命令一样,这样做是因为它们(全部?)被写入来分隔shell在使用逗号时进一步给出的参数?

Unix和Windows之间存在两个不同之处:

  • 内部命令(如DIR内置于shell中; 他们的命令行语法不必遵循与常规程序相同的规则
  • 在Windows上,程序负责解析自己的命令行。 shell解析重定向和管道,然后将其余的命令行传递给一个字符串中的程序

使用Visual Studio构建的Windows C程序使用Microsoft C运行时中的命令行解析器,类似于典型的Unix shell解析器并遵循空格和引号。

我从未见过使用过的C程序,或者; 作为命令行分隔符。 我知道explorer /e,.的特殊情况explorer /e,. ,但直到现在我才见过dir a,b例子。

批处理文件使用逗号或分号作为备用参数分隔符。

测试批处理文件:

@echo %1/%2/%3

测试运行:

> test.cmd 1,2,3
1/2/3
> test.cmd 1;2 3
1/2/3

并且,正如您所注意到的, dir使用它,也可以copy - 这些都是shell内置函数,并且可能也像批处理文件一样运行类似的解析器(它不完全相同,因为您可以执行像cd..这样的操作cd..dir/s这是不可能为别的)。 我猜(注意:推测)这是某种向后兼容性,可以追溯到DOS甚至CP / M天。 现在你可能应该只使用空格。 正如Tim所说,C运行时决定了有关参数的某些内容以及它们应该如何被解析。 许多其他语言/框架遵循该惯例,但不一定全部。 例如,PowerShell具有完全不同的参数处理,当与其中的本机程序交互时,这有时会令人惊讶(可以说,PowerShell cmdlet和函数不是其他地方可执行的程序,同样也是批处理文件)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM