2017-06-14 1238 views
-1

我试图执行批处理文件“spoon.bat”来自PENTAHO(pdi-ce-7.1.0.0-12),但有一个错误。该系统找不到指定的路径(批处理文件) - 使用路径有空格 - Pentaho的spoon.bat(PDI-CE-7.1.0.0-12)

,其中发现问题的批处理文件的一部分:

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" 

任何想法如何声明它来解决它?

+0

总是用引号将变量名和变量内容括起来,其中有空格'set“pentho_java = C:\ programfiles(x86)\ ... \ java.exe”'也是'>'和'<'是重定向输出和输入。 – elzooilogico

+0

你的结论是错误的,一个路径只在cmd.exe视图的调用语句中引用。另一个只是变量 - 最后一个命令包含错误的重定向符号。 – LotPings

+0

嗨elzooilogico。这种方式不起作用。 –

回答

1

环境变量PENTAHO_JAVA在哪里引用?

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

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

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" 

对于理解使用的命令以及它们如何工作,打开命令提示符窗口中,执行有下面的命令,并阅读完全针对每个命令非常仔细地显示所有帮助页面。

  • call /?
  • echo /?
  • for /?
  • goto /?
  • if /?
  • pause /?
  • reg /?
  • reg query /?
  • rem /?

阅读也是微软文章的2>nul的解释,从而重定向操作人员必须在此批代码逃走FOR与插入符号^命令行约Using Command Redirection Operators。并阅读关于Single line with multiple commands using Windows batch file的解答&运营商的解释。

0

通常,不要修改随Kettle一起提供的shell脚本。您应该设置某些环境变量以使脚本适应您的运行时环境。查看脚本set-pentaho-env中的顶级评论部分,以了解适合您系统的最佳选择。

顺便提一下:目前的Java 8安全基线8u131已于2017年4月发布,但您仍然落后于此。另外,您是否意识到您正在使用支持有限RAM的32位JVM?

相关问题