2017-06-14 1245 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?

相關問題