gpt4 book ai didi

Windows 批处理 : "if exist" -- path exists but it says no -- why?

转载 作者:可可西里 更新时间:2023-11-01 09:47:56 31 4
gpt4 key购买 nike

我的批处理文件中有这个脚本 --

if not exist "%JAVA_HOME%" (
echo JAVA_HOME '%JAVA_HOME%' path doesn't exist) --- (1)
else (
echo Setting JAVA property to '%JAVA_HOME%\bin\java' --- (2)
set "JAVA=%JAVA_HOME%\bin\java")

%JAVA_HOME% 设置为 C:\Program Files (x86)\Java\jdk1.7.0_45。这个位置存在于我的机器上,但上面的代码执行第 (1) 行,为什么?

跟进:

这让我发疯,我现在有了这个脚本 --

if "x%JAVA_HOME%" == "x" (
set JAVA=java
echo JAVA_HOME is not set. Unexpected results may occur.
echo Set JAVA_HOME to the directory of your local JDK to avoid this message.
) else (
if not exist "%JAVA_HOME%" (
echo Here ----------------------------------> note this line !!
echo JAVA_HOME '%JAVA_HOME%' path doesn't exist
goto END
) else (
echo Setting JAVA property to '%JAVA_HOME%\bin\java'
set "JAVA=%JAVA_HOME%\bin\java"
)
)
:END

%JAVA_HOME% 设置正确(它是 C:\Program Files (x86)\Java\jdk1.7.0_45)。但是当我运行时,我得到了这个错误——

prompt> test.bat
prompt> \Java\jdk1.7.0_45' was unexpected at this time
prompt> echo JAVA_HOME 'C:\Program Files (x86)\Java\jdk1.7.0_45' path does not exist

这是怎么回事?另请注意 echo Here 行也没有执行。

最佳答案

Raymond Chen once said :

The batch language was not designed; it evolved.

这使它充满了怪癖。其中之一是它对括号很挑剔。

以下代码适用于我的机器:

@echo off

if not exist "%JAVA_HOME%" (
echo JAVA_HOME '%JAVA_HOME%' path doesn't exist
) else (
echo Setting JAVA property to '%JAVA_HOME%\bin\java'
set JAVA=%JAVA_HOME%\bin\java
)

我使用了 ) else (,单括号单独一行,并从 echo 语句中删除了括号。

您可能还想检查双引号。像您一样将变量名放在引号内将从值中删除引号。这是一个例子:

C:\>set "test=foo bar"

C:\>echo %test%
foo bar

C:\>echo "%test%"
"foo bar"

如果您需要在变量值中 引号,则将它们放在右侧,如下所示:

C:\>set test="foo bar"

C:\>echo %test%
"foo bar"

从头开始,选择前者会给你更多的灵 active (见@foxidrive 评论),但这完全取决于你必须使用什么。

关于Windows 批处理 : "if exist" -- path exists but it says no -- why?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19943057/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com