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,希望大神帮我看一下哪里语法不正确
展开
 我来答
梦忠魂
2015-06-11 · TA获得超过299个赞
知道小有建树答主
回答量:392
采纳率:93%
帮助的人:172万
展开全部
@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
)


补充:

  1. %~dps0 改为 %~dp0 看看,不使用短路径。dps0后可以不需要接 \ ,输出的路径已经带 \

  2. 检查你 in 内的命令文件是否存在,语法是否正确。是否支持 -s 这个参数,这极有可能是你命令语法不正确的主因。

  3. 不知道是你 in 内的命令输出的结果是只有一行,还是需要在 do 后,循环执行 set 变量和判断,如果需要循环执行,需要开启变量延迟

  4. 在 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
依梦琴瑶
高粉答主

2015-06-11 · 说的都是干货,快来关注
知道顶级答主
回答量:6.9万
采纳率:82%
帮助的人:1.7亿
展开全部
语法没有错,确实很诡异!
追问
那有没有可能是我缺少什么东西造成的呢?我之前跑一些bat文件也老是有这个错误提示,别人跑都没问题
追答
这个真的不清楚。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式