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”变量中?

第二:需要在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
)
于 2012-11-29T14:14:54.933 回答