我花了一些时间来解决这个问题。我的目标是通过使用批处理文件循环遍历目录来构建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>
如果路径中没有空格,则按预期工作。
希望有人能就此提供解决方案。
谢谢,
答案 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”。
感谢。