2

コマンドプロンプトから、またダブルクリックして次のバッチファイル(.bat)ファイルを実行していましたが、どちらの場合も出力が異なります。

@echo off

echo The user name is %USERNAME% > log.txt

set instDir=%cd%

set Prop_TXT="%instDir%\bin\packages\sometextfile.txt"

findstr /C:StringToFind %Prop_TXT% >> log.txt


for /F "usebackq  tokens=1,2,3 delims=/" %%i in (`findstr javavm %Prop_TXT%`) do (

set DIRE=%%j


"%instDir%\bin\%DIRE%\bin\java.exe" -version 2>> log.txt

)

コマンドプロンプトで、log.txtはJavaのバージョンで適切な出力を提供します。ダブルクリックすると、 「システムlog.txt指定されたパスを見つけることができません」と表示されます。

私を助けてください。私はグーグル検索をたくさんしましたが、解決策を見つけることができませんでした。

4

1 に答える 1

1

最初:instDir =%cd%を設定します

現在のパスを変数「CD」に保存している場合、なぜそれを「instdir」変数に再度保存したいのですか?

2番目:FOR内で変数を展開する必要があります。setlocalenabledelayedexpansionコマンドを使用できます。

3番目:1つの違いは、スクリプトで2つの%%を使用する場合、コマンドプロンプトで1つの%記号を使用する必要があるため、「FOR%%i」または「SETDIRE=%%j」を直接続行できないことです。コマンドプロンプト。

これを試して:

@echo off
echo The user name is %USERNAME% > log.txt

set Prop_TXT=".\bin\packages\sometextfile.txt"

findstr /C:StringToFind %Prop_TXT% >> log.txt

for /F "usebackq tokens=1,2,3 delims=/" %%i in (`findstr javavm %Prop_TXT%`) do (
    set "DIRE=%%j"
    Call ".\bin\%%DIRE%%\bin\java.exe" -version 2>> log.txt
)
于 2012-11-29T14:14:54.933 に答える