通过双击和从命令提示符执行.bat文件的区别是什么

时间:2012-11-29 12:28:42

标签: batch-file

我在命令提示符下运行以下批处理文件(.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 个答案:

答案 0 :(得分:1)

首先:设置instDir =%cd%

如果您将当前路径保存在变量“CD”中,为什么要将其再次存储在“instdir”var?

第二:您需要在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
)