批处理文件中的空格路径

时间:2014-04-11 08:18:03

标签: batch-file

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

我希望双引号是可选的。可能吗?。我错过了什么?。

提前致谢。请帮忙

4 个答案:

答案 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!