Dummy.bat
set "EXECUTE_DIR=%2"
echo %EXECUTE_DIR%
执行命令:Dummy.bat "para1" C:\Program Files\Microsoft SQL Server
我输出为:
C:\Program
但如果我用双引号来表示参数:Dummy.bat "para1" "C:\Program Files\Microsoft SQL Server"
我得到了所需的输出:
C:\Program Files\Microsoft SQL Server
我希望双引号是可选的。可能吗?。我错过了什么?。
提前致谢。请帮忙
答案 0 :(得分:1)
您可以从参数列表中删除第一个参数,并将结果放入字符串中:
@echo off
set s1=%*
set s2=%1
set s3=%s1:* =%
echo %s1%
echo %s2%
echo %s3%
输出:
c:\>Dummy.bat "para1" C:\Program Files\Microsoft SQL Server
"para1" C:\Program Files\Microsoft SQL Server
"para1"
C:\Program Files\Microsoft SQL Server
答案 1 :(得分:0)
由于空格是分隔符,如果要使用标准参数处理并将第二个参数称为%2,则除了使用引号括起包含空格的值之外没有其他选项。
选项是对参数管理进行编码。确定在批处理文件中,在某个参数编号之后的任何内容,在您的情况下,在第一个参数之后的任何内容,将仅作为一个参数处理,因此您可以编写类似
的内容@echo off
set "_2="
:loop
if defined _2 (set "_2=%_2% %2") else (set "_2=%2")
shift
if not "%~2"=="" goto :loop
echo %_2%
这会将第一个参数之后的所有参数连接到一个你应该使用%2
参数的变量。
答案 2 :(得分:0)
演示:
@ECHO OFF
SETLOCAL
set wholeline=%*
set "parm1=%~1"
set "parm2=%wholeline:* =%"
CALL set "parm2a=%%wholeline:*%1 =%%"
set parm
GOTO :EOF
答案 3 :(得分:0)
你可以set
一个计数器,并取出第一个元素(%1
)之后的所有内容。
@echo off
setlocal EnableDelayedExpansion
set "$l="
set "$c=0"
for %%a in (%*) do (
if !$c! geq 1 set $l=!$l! %%a
set /a $c+=1
)
echo !$l:~1!