C:\Oracle\Ora12c\perl\bin
が%oracle_home%\perl\bin
は、システム環境変数PATH に追加するかどうかを決定するために非標準環境変数machine
に存在するかどうかをチェックなぜ私は知りません。このディレクトリパスの存在について、PATHシステムを確認することをお勧めします。
EOF
は有効なコマンドではありません。したがって、Windowsコマンドプロセッサーはエラーメッセージを出力し、次のコマンドラインがsetx
の行で続行されます。これが、バッチコードが機能しない理由です。 ELSEブランチのコマンドはgoto :EOF
である必要があります。
は、はるかに良い%oracle_home%\perl\bin
又はその拡張等価物がシステムに存在する場合システム内に存在しない場合は、パスとシステムPATHに代わりにプリペンドを付加PATHをチェックするコードを以下であろう。このバッチコードのテンプレートとして使用Why are other folder paths also added to system PATH with SetX and not only the specified folder path?にこのバッチコードの読み取り解答の詳細については
@echo off
if not exist "%oracle_home%\perl\bin\*" goto :EOF
setlocal EnableExtensions DisableDelayedExpansion
for /F "skip=2 tokens=1,2*" %%N in ('%SystemRoot%\System32\reg.exe query "HKLM\System\CurrentControlSet\Control\Session Manager\Environment" /v "Path" 2^>nul') do (
if /I "%%N" == "Path" (
set "SystemPath=%%P"
goto CheckPath
)
)
echo Error: System environment variable PATH not found.
echo.
endlocal
pause
goto :EOF
:CheckPath
setlocal EnableDelayedExpansion
set "Separator="
set "PathToAdd=%%oracle_home%%\perl\bin"
set "OraclePerlPath=%oracle_home%\perl\bin"
if not "!SystemPath:~-1!" == ";" set "Separator=;"
if "!SystemPath:%PathToAdd%=!" == "!SystemPath!" (
if "!SystemPath:%OraclePerlPath%=!" == "!SystemPath!" (
%SystemRoot%\System32\setx.exe PATH "!SystemPath!%Separator%%PathToAdd%" /M
)
)
endlocal
endlocal
。それはなぜ問題のバッチコードが間違いなく全くうまくいかないのかを説明します。
注:コマンドSETXは、Windows XPではデフォルトでは使用できません。
使用されているコマンドとその動作方法を理解するには、コマンドプロンプトウィンドウを開き、次のコマンドを実行して、コマンドごとに表示されているすべてのヘルプページをすべてよく読んでください。
echo /?
endlocal /?
for /?
goto /?
if /?
pause /?
reg /?
とreg query /?
set /?
setlocal /?
setx /?
なぜ他の支店の任意の場所に行かなくても、あなた最初のブランチで '後藤SETPATH'だけ' EOF'しますか? –
@LưuVĩnhPhúcこのバッチファイルは別のバッチファイルから呼び出されているので、パスが存在すると、このバッチファイルは終了し、呼び出された場所の親バッチファイルが操作を再開します。このファイルのEOFに行きますパスが存在していない場合は、パスを設定します。 – n00b
いいえ、EOFは有効なコマンドではないため、エラーが発生します。トーEOFラベルに行きたい場合は、 'goto EOF'を使います –