bat命令语法不正确 10
for/f"delims="%%ain('"%~dps0\find_java%arch_ext%.exe"-s')dosetjava_exe=%%aifnotdefine...
for /f "delims=" %%a in ('"%~dps0\find_java%arch_ext%.exe" -s') do set java_exe=%%a
if not defined java_exe goto :CheckFailed
这是在bat文件中的部分代码
这是运行到这里显示语法不正确
我没学过bat,希望大神帮我看一下哪里语法不正确 展开
if not defined java_exe goto :CheckFailed
这是在bat文件中的部分代码
这是运行到这里显示语法不正确
我没学过bat,希望大神帮我看一下哪里语法不正确 展开
2个回答
展开全部
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
for /f "delims=" %%a in ('"%~dps0find_java%arch_ext%.exe" -s') do (
set java_exe=%%a
if not defined java_exe goto :CheckFailed
)
补充:
%~dps0 改为 %~dp0 看看,不使用短路径。dps0后可以不需要接 \ ,输出的路径已经带 \
检查你 in 内的命令文件是否存在,语法是否正确。是否支持 -s 这个参数,这极有可能是你命令语法不正确的主因。
不知道是你 in 内的命令输出的结果是只有一行,还是需要在 do 后,循环执行 set 变量和判断,如果需要循环执行,需要开启变量延迟
在 for 内 set 变量,需要在 for 之前开启变量延迟,命令为
SETLOCAL ENABLEDELAYEDEXPANSION
否则在 for 的时候,变量的新值只有在 for 结束时才生效,而在此期间,都会使用之前的值。
需要开启变量延迟的情况一般为:使用到 ( ) 括起的、& 或 && 连接的复合语句
当使用 if、for 时,其结束的命令是允许省略 ( ) ,但是如果需要 set 变量,还是需要开启变量延迟。
在开启变量延迟后,符合语句内的 % 需要改为 ! ,前者为变量延迟前使用,后者为变量延迟后使用。 if not defined 时本身不需要加 % ,所以也无需加 !
最后,上一段以 if 为例的变量延迟例子
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
if 1==1 (
set a=aa
if not defined a (
echo %a%
echo !a!
goto :Check
) else (
echo %a%
echo !a!
goto :yes
)
)
pause
:check
echo 变量没赋值
pause
:yes
echo 变量已赋值
pause
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询