batch:如何用空格调用第二个参数?

时间:2011-02-02 18:49:24

标签: scripting parameters batch-file

我正在调用一个包含两个参数的批处理文件,如下所示:

C:\myBatch.bat username hello this is text

现在我想访问用户名(没问题,%1)。但我现在想要在一秒参数中得到所有其他单词。如果我打电话给%2,那么只有“你好”。并且我不可能在文本周围用双引号调用批处理文件...

任何想法? (类似于%i!=“”然后在一个变量中执行...)?

3 个答案:

答案 0 :(得分:4)

使用双引号是将空格分隔的字符串打包成单个参数的正确方法,但作为替代方法,您可以使用FOR来解析“所有参数变量”(%*)。

@echo off
FOR /F "tokens=1,*" %%A in ("%*") do (
    echo.Username=%%A
    echo.Message=%%B
)

当调用test.cmd nickname foo bar baz时,它会打印:

Username=nickname 
Message=foo bar baz

我想这就是你想要的?

答案 1 :(得分:2)

调用批处理脚本时,将第二个参数放在双引号中。

在批处理脚本中,使用%~2引用不带引号的第二个参数。

如果要在quoted参数中使用双引号,请复制引号字符。随着批处理脚本中的dequoting,也会删除重复的引号,AFAIK。


这是一个简单的脚本,说明了这个想法:

@ECHO OFF
ECHO %1 %2
ECHO %~1 %~2

现在这样称呼:

  

mybatch.bat用户名“你好,这是文字”

并查看结果:

  

用户名“你好,这是文字”

     

用户名你好这是文本

也就是说,当您使用%i引用参数时,会保留引号(如果有的话),但%~i会有效地删除它们。

而且,正如您从%~1使用中看到的那样,如果没有引号,则输出与%1的输出相同,因此您无需始终仅包含引号来证明使用波浪号。

答案 2 :(得分:1)

根据此文档http://ss64.com/nt/syntax-esc.html双引号应该有效。