7

我正在尝试使用以下命令在我的类路径中连接变量,但是当文件夹名称包含空格时它不起作用:

call concat : %variable%

在哪里%variable% ={folder name containing space}

我试着加上引号:

call concat : "%variable%"

但这在我的类路径中添加了 2 个双引号,如下所示:

""folder name containing space""

:concat
set CLASSPATH=%CLASSPATH%;"%1"
4

3 回答 3

13

SET在整个语句周围加上引号:

SET "FOO=AB C"
SET "BAR=%FOO%D EF"
echo %BAR%

输出:

AB CD EF
于 2016-01-11T08:54:17.413 回答
11

不要对带有空格的字符串使用额外的双引号。该参数%~删除字符串周围的所有双引号对:

@echo off &setlocal
set "Variable="my var""
echo Variable:  %Variable%
call :concat %Variable%
goto :eof

:concat
echo concat %%1:    %1
set "NewVar=%~1"
echo concat NewVar: %newvar%
goto :eof
endlocal

输出是:

Variable:       "my var" 
concat %1:      "my var" 
concat NewVar:  my var

如果您在字符串周围加上额外的双引号,则会发生以下情况:

@echo off &setlocal
set "Variable="my var""
echo Variable:  %Variable%
call :concat "%Variable%"
goto :eof

:concat
echo concat %%1:    %1
set "NewVar=%~1"
echo concat NewVar: %newvar%
goto :eof
endlocal

输出损坏:

Variable:       "my var"
concat %1:      ""my
concat NewVar:  "my
于 2013-03-18T15:02:48.117 回答
1

从输入中删除双引号,在整个集合周围使用双引号,当使用连接字符串时,用双引号将它们括起来,例如:

set root=%~1
@echo off
setlocal EnableDelayedExpansion
set i=0
for %%d in (
1.07 1.023 1.075 1.08 1.04
) do (
   set /A i=i+1
   set scale[!i!]=%%d
)
set i=0
for %%d in (
CO DE MH PL Pr
) do (
   set /A i=i+1
   set port[!i!]=%%d
)
for %%A in (0 1 2 3 4) do (
set "file1=%root%\Event\Events.txt"
set "file2=%root%\Port E\PortE_!port[%%A]!.txt"
set "file3=%root%\Poli E By Port\E_!port[%%A]!.txt"
%0\..\average101v2.exe "!file1!" "!file2!" "!file3!" !scale[%%A]!
)
于 2017-03-28T20:57:38.120 回答