在参数中使用双引号

在UNIX中,我可以运行myscript '"test"' ,我会得到"test"

在Windows cmd我得到'test'

我怎么能通过双引号作为参数? 我想知道如何从cmd窗口手动执行此操作,所以我不必编写程序来testing我的程序。

我不能很快地重现症状:如果我用包含@echo.%1甚至@echo.%~1的batch filemyscript.bat尝试myscript '"test"' ,我会得到所有的引号: '"test"'

也许你可以尝试转义字符^像这样: myscript '^"test^"'

另一种逃避引号的方式(虽然可能不是最好),我发现在某些地方使用的使用多个双引号 。 为了让其他人的代码清晰可辨,我会解释一下。

这是一套基本规则:

  1. 当不包含在双引号组中时,空格分隔参数:
    program param1 param2 param 3会传递四个参数给program.exe
    param1param2param3
  2. 将parameter passing给程序时,双引号组忽略空格作为值分隔符:
    program one two "three and more"将三个parameter passing给program.exe
    onetwothree and more
  3. 现在来解释一些困惑:

  4. 与双引号不直接相邻的双引号组合并成一个参数:
    hello"to the entire"world作为一个参数: helloto the entireworld
  5. 注:以前的规则并不意味着两个双引号的组可以直接相邻。

  6. 任何直接在结束引号之后的引号将被视为(或作为)与双引号组相邻的简单展开文本的一部分,但只有一个双引号:
    "Tim says, ""Hi!"""将作为一个参数: Tim says, "Hi!"

因此,有三种不同types的双引号:引用引用,引用引用,引用明文。
以下是最后一个令人困惑的一行:

 “打开双引号组
 T里面的“s”
我在里面
里面的“s”
    里面的空间不分开
在里面
一个里面的“s”
在“”里面
在里面
 ,在“s”里面
    里面的空间不分开
 “密切的双引号组
 “引用直接跟随 - 作为简单的解包文本:”
外面的“H”join到前一个相邻的组中
我在外面“” -  ...
 ! 外面“”s  -  ...
 “打开双引号组
 “密切的双引号组
 “引用直接跟随 - 作为简单的解包文本:”

因此,文本有效地join了四组字符(但是没有任何一个):
Tim says,是第一个,包裹逃离的空间
"Hi!是第二个,没有包裹(没有空格)
是第三个,双引号的小组什么也没有包装
"是第四个,解开了接近报价。

正如你所看到的那样,这个双引号的小组仍然是不必要的,因为如果没有它,下面的双引号将会打开一个双引号的小组而不是纯文本。

由此可见,应该认识到,因此,在内外引用中,三个双引号作为一个明文无误的双引号:

 “Tim对他说:”“最近发生了什么事?”“”“

Tim said to him, "What's been happening lately?"会打印Tim said to him, "What's been happening lately?" 如预期。 因此,三个引号总能可靠地用作逃避。
但是,在理解它的时候,你可能会注意到最后的四个引号可以减less到两个,因为它在技术上是增加了一个不必要的空双引号组。

以下是一些closures它的例子:

程序ab REM发送(a)和(b)
程序“”“”“”“”REM发送(“a”)
程序“”“ab”“”REM发送(“a”和“b”)
程序“”“”你好,“”迈克说。  REM发送(“你好,”Mike说。)
程序“”a“”b“”c“”d“”REM发送(abcd),因为“”组不包装
程序“hello to”“”quotes“”REM发送(hello to“quotes”)
节目“”“”你好世界“”REM发送(“你好世界”)
节目“”“你好”世界“”REM发送(“你好世界”)
程序“”“你好”世界“”REM发送(“你好”)和“(世界)”
节目“你好”“世界”“”REM发送(你好“世界”)
节目“你好”“”世界“”REM发送(你好“世界”)

最后说明:我没有从任何教程中读到任何这个 – 我通过实验提出了所有这些。 所以我的解释在内部可能不是真的。 尽pipe如此,上面的所有例子都是按照给定的方式来评估的,从而证实了(但不是certificate)我的理论。

我testing了这个在Windows 7,64位只使用* .exe调用parameter passing(不* * .bat,但我想它的工作原理是一样的)。

尝试这个:

 myscript """test""" 

在参数中“跳转到单个”。