当路径有空间时,使用批处理循环构建类路径时出现问题

时间:2015-04-26 14:20:46

标签: java batch-file

我花了一些时间来解决这个问题。我的目标是通过使用批处理文件循环遍历目录来构建java类路径。

这是我的计划:

@echo off

@setlocal enableextensions
@cd /d "%~dp0"

set "CURRENT_DIR=%cd%"
setx STSPOS_PS "%CURRENT_DIR%" /m
set "BIN=%CURRENT_DIR%\bin"
set "LIB=%CURRENT_DIR%\lib"
set "LOG=%CURRENT_DIR%\log"
set "jdk=%CURRENT_DIR%\jdk"
setx JAVA_HOME "%JDK%" /m

FOR %%X in ("%LIB%\*.jar") DO CALL :AddToPath "%%~dpnfX"

FOR %%X in ("%JDK%\lib\*.jar") DO CALL :AddToPath "%%~dpnfX"

FOR %%X in ("%JDK%\jre\lib\*.jar") DO CALL :AddToPath "%%~dpnfX"

FOR %%X in ("%JDK%\jre\lib\ext\*.jar") DO CALL :AddToPath "%%~dpnfX"

%BIN%/service.bat
echo %CLASSPATH%
GOTO :EOF

:AddToPath
SET CLASSPATH=%~1;%CLASSPATH%
:EOF

我遇到的问题是当目录在路径中包含空格时,如果我在文件夹“C:\ project abc”中运行批处理文件,程序将遇到“uncrecognize c:\ project command not found”的错误。 / p>

如果路径中没有空格,则按预期工作。

希望有人能就此提供解决方案。

谢谢,

2 个答案:

答案 0 :(得分:1)

引号是您的saviour

@echo off

@setlocal enableextensions
@cd /d "%~dp0"

set "CURRENT_DIR=%cd%"
setx STSPOS_PS "%CURRENT_DIR%" /m
set "BIN=%CURRENT_DIR%\bin"
set "LIB=%CURRENT_DIR%\lib"
set "LOG=%CURRENT_DIR%\log"
set "jdk=%CURRENT_DIR%\jdk"
setx JAVA_HOME "%JDK%" /m

FOR %%X in ("%LIB%\*.jar") DO CALL :AddToPath "%%~dpnfX"

FOR %%X in ("%JDK%\lib\*.jar") DO CALL :AddToPath "%%~dpnfX"

FOR %%X in ("%JDK%\jre\lib\*.jar") DO CALL :AddToPath "%%~dpnfX"

FOR %%X in ("%JDK%\jre\lib\ext\*.jar") DO CALL :AddToPath "%%~dpnfX"

%BIN%/service.bat
echo %CLASSPATH%
GOTO :EOF

:AddToPath
SET "CLASSPATH="%~1";%CLASSPATH%"
:EOF

虽然我会使用for /r并延迟扩展,所以一切都可以通过一个循环而没有子程序来完成。

答案 1 :(得分:1)

我认为在进一步研究后我找到了解决方案。

我改变了行

set "CURRENT_DIR=%cd%"

FOR %%F in ("%cd%") DO set "CURRENT_DIR=%%~sF"

所以输出将是“C:\ project abc”到“C:\ projec~1”。

感谢。