2012-11-29 104 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 
) 
相关问题