2012-11-29 102 views
2

我從命令提示符運行下面的批處理文件(.bat)文件,也是通過雙擊,但它在兩種情況下都給出了不同的輸出。通過雙擊和命令提示符執行.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顯示「系統找不到指定的路徑。」

請幫幫我。我做了很多googe搜索,但找不到解決方案。

回答

1

第一:設置INSTDIR =%CD%

如果當前路徑保存在變量「CD」你爲什麼要在「INSTDIR」變種再存放起來?

第二個:您需要展開FOR中的變量,您可以使用setlocal enabledelayedexpansion命令。

第三個:一個區別是命令提示符你需要使用一個%符號,當你在腳本中使用兩個%%,所以「FOR %% i」或「SET DIRE = %% 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 
) 
相關問題