我正在调用一个包含两个参数的批处理文件,如下所示:
C:\myBatch.bat username hello this is text
现在我想访问用户名(没问题,%1)。但我现在想要在一秒参数中得到所有其他单词。如果我打电话给%2,那么只有“你好”。并且我不可能在文本周围用双引号调用批处理文件...
任何想法? (类似于%i!=“”然后在一个变量中执行...)?
答案 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双引号应该有效。