我想将空格分隔的变量传递到批处理文件中,如:
c:\applications\mi_pocess.bat A1 1AA
当我在echo %1
中运行mi_process
时,它会返回A1
我如何认识A1 1AA
是一个字符串?
我已尝试将其包装在我的外部软件中的双引号中,如
c:\applications\mi_pocess.bat + chr$(34) + A1 1AA + Chr$(34)
和echo %1
现在返回"A1 1AA"
(我不想在变量中使用引号)
由于
答案 0 :(得分:4)
我确定您知道.bat中的%1
,%2
等代表在命令行上传递给.bat的编号参数。
如果您将其用作%~1
,%~2
等,则所有周围的引号都会自动删除,如果它们在那里。
考虑这个space-in-args.bat
进行测试:
@echo off
echo. %1
echo. (original first argument echo'd)
echo.
echo. "%1"
echo. (original first argument with additional surrounding quotes)
echo.
echo. %~1
echo. (use %%~1 instead of %%1 to remove surrounding quotes, should there be)
echo.
echo. "%~1"
echo. (we better use "%%~1" instead of "%%1" in this case:
echo. 1. ensure, that argument is quoted when used inside the batch;
echo. 2. avoid quote doubling should the user have already passed quotes.
echo.
运行它:
space-in-args.bat "a b c d e"
输出是:
"a b c d e"
(original first argument echo'd)
""a b c d e""
(original first argument with additional surrounding quotes)
a b c d e
(using %~1 instead of %1 removes surrounding quotes, should there be some)
"a b c d e"
(we better use "%~1" instead of "%1" in this case:
1. ensure, that argument is quoted when used inside the batch;
2. avoid quote doubling should the user have already passed quotes.
另请参阅for /?
(向下滚动)以了解其中一些转化。
答案 1 :(得分:1)
您要么在批处理文件中使用%~1
:
echo %1
echo %~1
的产率:
> test "A1 AA1"
"A1 AA1"
A1 AA1
因为%~1
会从参数中删除引号。
如果您从未期望超过一个参数,则另一个选项是%*
。 %*
包含批处理文件的所有参数。这样你就可以避免在这里使用引号,但这也意味着如果你想提出另一个不应该是你当前所期望的参数的论点,那你就不走运了:
echo %*
然后产生:
> test2 A1 AA1
A1 AA1
答案 2 :(得分:0)
这是向批处理文件发送包含空格的值的唯一方法,因此如果您不想使用引号,则必须在批处理文件中删除它们。
答案 3 :(得分:0)
你应该使用%*来获取除<0>中的%0之外的所有参数
如果你这样调用一些批处理文件
call some bat 54 12 33
代码
set params=%*
echo Params goted : %params%
它将返回:
Params goted : 54 12 33