Batch file 系统找不到指定的路径(批处理文件)-使用带空格的路径-PENTAHO spoon.bat(pdi-ce-7.1.0.0-12)

Batch file 系统找不到指定的路径(批处理文件)-使用带空格的路径-PENTAHO spoon.bat(pdi-ce-7.1.0.0-12),batch-file,pentaho-spoon,Batch File,Pentaho Spoon,我试图执行PENTAHO(pdi-ce-7.1.0.0-12)中的批处理文件“spoon.bat”,但出现错误 发现错误的批处理文件的一部分: if "%SPOON_CONSOLE%"=="1" set PENTAHO_JAVA=C:\Program Files (x86)\Java\jre1.8.0_121\bin\java.exe if not "%SPOON_CONSOLE%"=="1" set PENTAHO_JAVA=C:\Program Files (x86)\Java\jre1.8

我试图执行PENTAHO(pdi-ce-7.1.0.0-12)中的批处理文件“spoon.bat”,但出现错误

发现错误的批处理文件的一部分:

if "%SPOON_CONSOLE%"=="1" set PENTAHO_JAVA=C:\Program Files (x86)\Java\jre1.8.0_121\bin\java.exe
if not "%SPOON_CONSOLE%"=="1" set PENTAHO_JAVA=C:\Program Files (x86)\Java\jre1.8.0_121\bin\javaw.exe
set IS64BITJAVA=0
call "%~dp0set-pentaho-env.bat"
但我收到以下错误:

The system cannot find the path specified
错误是当我试图将找到java.exe或javaw.exe的路径分配给“PENTAHO_java”时

我用双引号修改了路径,但不起作用;我还修改为:

if "%SPOON_CONSOLE%"=="1" set "PENTAHO_JAVA=C:\<Program Files (x86)>\Java\jre1.8.0_121\bin\java.exe"
如果“%SPOON\u CONSOLE%”=“1”设置“PENTAHO\u JAVA=C:\\JAVA\jre1.8.0\u 121\bin\JAVA.exe”

知道如何声明它来修复它吗?

环境变量
PENTAHO\u JAVA
引用在哪里

它必须用
%PENTAHO_JAVA%”
引用,因为分配给此环境变量的字符串包含空格或
&()[]{}^=;!'+`~。在上一个帮助页面的最后一段中,在命令提示符窗口中运行的Windows命令解释器输出的帮助中解释了这一点

当然,也可以使用已添加的必要双引号定义环境变量,即使用:

if     "%SPOON_CONSOLE%"=="1" set "PENTAHO_JAVA="%ProgramFiles(x86)%\Java\jre1.8.0_121\bin\java.exe""
if not "%SPOON_CONSOLE%"=="1" set "PENTAHO_JAVA="%ProgramFiles(x86)%\Java\jre1.8.0_121\bin\javaw.exe""
set "IS64BITJAVA=0"
call "%~dp0set-pentaho-env.bat"
但不建议这样做。最好是使用

if     "%SPOON_CONSOLE%"=="1" set "PENTAHO_JAVA=%ProgramFiles(x86)%\Java\jre1.8.0_121\bin\java.exe"
if not "%SPOON_CONSOLE%"=="1" set "PENTAHO_JAVA=%ProgramFiles(x86)%\Java\jre1.8.0_121\bin\javaw.exe"
set "IS64BITJAVA=0"
call "%~dp0set-pentaho-env.bat"
和引用环境变量
PENTAHO_JAVA
用双引号括起来,其中需要指定用双引号括起来的值

例如:

@echo off
rem Get path of latest installed Java directly from Windows registry.
for /F "skip=1 tokens=1,2*" %%N in ('%SystemRoot%\System32\reg.exe QUERY "HKLM\Software\Microsoft\Windows\CurrentVersion\App Paths\javaws.exe" /v Path 2^>nul') do if /I "%%N" == "Path" set "PENTAHO_JAVA=%%P" & goto JavaPathFound

rem Path of Java not found in registry, search for 32-bit Java in the default
rem program files folders of 64-bit and 32-bit Windows and take first found.
if "%ProgramFiles(x86)%" == "" goto Windows_x86
for /R "%ProgramFiles(x86)%" %%I in (java*.exe) do set "PENTAHO_JAVA=%%~dpI" & goto JavaPathFound
:Windows_x86
for /R "%ProgramFiles%" %%I in (java*.exe) do set "PENTAHO_JAVA=%%~dpI" & goto JavaPathFound

echo Error: Java binary directory not found.
echo/
pause
goto :EOF

:ErrorJavaEXE
echo Error: File %PENTAHO_JAVA% not found.
echo/
pause
goto :EOF

:JavaPathFound
if not "%PENTAHO_JAVA:~-1%" == "\" set "PENTAHO_JAVA=%PENTAHO_JAVA%\"
if "%SPOON_CONSOLE%" == "1" (
    set "PENTAHO_JAVA=%PENTAHO_JAVA%java.exe"
) else (
    set "PENTAHO_JAVA=%PENTAHO_JAVA%javaw.exe"
)

rem Check existence of Java executable to run.
if not exist "%PENTAHO_JAVA%" goto ErrorJavaEXE

"%PENTAHO_JAVA%" -version
call "%~dp0set-pentaho-env.bat"
要了解所使用的命令及其工作方式,请打开命令提示符窗口,在其中执行以下命令,并非常仔细地阅读为每个命令显示的所有帮助页面

  • 呼叫/?
  • echo/?
  • 获取/?
  • goto/?
  • 如果/?
  • 暂停/?
  • reg/?
  • reg query/?
  • rem/?

另请阅读Microsoft关于的文章,以了解有关
2>nul
的解释,其中重定向运算符必须在命令行的带有插入符号的
^
的批处理代码中转义。阅读关于
&
操作符的解释。一般来说,不要修改壶中的shell脚本。您应该设置某些环境变量以使脚本适应您的运行时环境。查看script
set pentaho env
中的顶部注释部分,了解什么最适合您的系统


顺便说一句:目前的Java8安全基线8u131是在2017年4月发布的——您远远落后于此。另外,您是否意识到您使用的是32位JVM,RAM支持有限?

请始终在引号中加上变量名和变量内容,其中空格
设置为“pentho_java=C:\programfiles(x86)\…\java.exe”
您的结论是错误的,路径仅在cmd.exe视点的call语句中引用。另一个只是变量-最后一个命令包含错误的重定向符号。Hi elzoologico。这种方法不起作用。在调用之前,可能
设置“path=%path%;c:\program files(x86)\…\bin”
对不起,这种方法也不起作用