无忧启动论坛

标题: 关于批处理里调用批处理失败的问题 [打印本页]

作者: ut0    时间: 2024-9-18 13:29
标题: 关于批处理里调用批处理失败的问题
本帖最后由 ut0 于 2024-9-18 16:06 编辑

本人之前有个批处理,里面有调用其他批处理的语句,之前都运行没有问题
但是最近想把里的语句改一下,就一直不成功,就想请教大家,帮忙看看问题出在哪里
这个批处理我是在U盘上运行的,而且这个批处理,把所有文件复制到硬盘上运行却又是能正常运行的,很莫名其妙
这个批处理大概是这样的

  1. cd /d %~dp0

  2. start tuofang.bat

  3. start dismadd.bat

  4. cd /d %~dp0

  5. REGEDIT /S NEW.reg
复制代码

之前是在主批处理用的call命令来调用小批处理,然后现在想换成start命令
现在调用的第一个批处理tuofang.bat是正常的,然后从dismadd.bat这里就出问题了

dismadd.bat里的语句大概是

dism /online /enable-feature /featurename:SMB1Protocol /norestart /quiet

然后会错误地显示很多行”操作成功完成“,但其实根本就没有成功运行


在dismadd.bat 之后的命名就又会继续正常运行下去

我觉得问题可能就是调用dism命令的时候,找不到系统的dism路径,所以就失败了

现象就是这样,不知道描述清楚没有,也请路过的批处理高手帮忙看看


作者: yyz2191958    时间: 2024-9-18 13:34
本帖最后由 yyz2191958 于 2024-9-18 13:42 编辑

按照下面形式试一试:

start cmd /k "E:\安装.bat"           %【运行多个批处理】%
作者: Allreal    时间: 2024-9-18 14:17
本帖最后由 Allreal 于 2024-9-18 14:21 编辑

按楼主的猜疑,试试在dismadd.bat首行加入:
path=%windir%\system32

要不然每句dism变成
%windir%\system32\dism  XXXXXXXXXXXXXXXXXXXXXXXXXX
??

作者: Allreal    时间: 2024-9-18 14:18
yyz2191958 发表于 2024-9-18 13:34
按照下面形式试一试:

start cmd /k "E:\安装.bat"           %【运行多个批处理】%

楼主可能想在任意目录能运行。
作者: ppll2030    时间: 2024-9-18 14:30
好好的瞎改什么

首选简单说一下start和call的区别,一个重要的功能就是,call可以让主程序暂停, 等待子程序运行结束。
start 不加参数,直接无视等待,同时运行多个子程序的同时,主程序会继续向下运行。
所以你的多个子程序如果是有变量传递,那就只能用call,不能用start同时运行,后面的子程序无法得到变量,自然运行了也就是错的。
作者: wn168cn@163.com    时间: 2024-9-18 15:04
学习一下
作者: ut0    时间: 2024-9-18 15:09
yyz2191958 发表于 2024-9-18 13:34
按照下面形式试一试:

start cmd /k "E:\安装.bat"           %【运行多个批处理】%

对,因为是在U盘下面运行,所以盘符和路径肯定是不固定的
作者: zlq_hysy    时间: 2024-9-18 15:19
学习来了,必须指定路径?
作者: 窄口牛    时间: 2024-9-18 15:29
start “” “文件路径”,前面那对冒号最好不要省略掉,可以没有引起来的标题名。
作者: ut0    时间: 2024-9-18 16:01
Allreal 发表于 2024-9-18 14:17
按楼主的猜疑,试试在dismadd.bat首行加入:
path=%windir%\system32

试了一下,还是不行啊
作者: ut0    时间: 2024-9-18 16:04
ppll2030 发表于 2024-9-18 14:30
好好的瞎改什么

首选简单说一下start和call的区别,一个重要的功能就是,call可以让主程序暂停 ...

对,我改成start命令就是一是不像等待副批处理运行,二是想根据情况,单独运行某些批处理

然后就是在来回跳转目录的时候,出了问题,不知道怎样才可以返回原路径继续执行命令
作者: wjgyz740526    时间: 2024-9-18 16:04
本帖最后由 wjgyz740526 于 2024-9-18 16:05 编辑

既然只是dism,为什么不直接把命令放在主程序里面?要这么间接调用?
如果目录有空格,cd /d %~dp0可能要加上双引号,cd /d "%~dp0"

作者: 旭东    时间: 2024-9-18 16:07
学习了
作者: ut0    时间: 2024-9-18 16:10
wjgyz740526 发表于 2024-9-18 16:04
既然只是dism,为什么不直接把命令放在主程序里面?要这么间接调用?
如果目录有空格,cd /d %~dp0可能要 ...

dism命令是主批处理调用的命令,我个人是想把有些dism命令单独提出来写到一起的
但又想在运行其他批处理的时候一起调用运行了

目录没有空格的,就在U盘根目录下的,文件名也都没有空格
作者: yyz2191958    时间: 2024-9-18 16:33
Allreal 发表于 2024-9-18 14:18
楼主可能想在任意目录能运行。

可以的
作者: yyz2191958    时间: 2024-9-18 16:35
ut0 发表于 2024-9-18 15:09
对,因为是在U盘下面运行,所以盘符和路径肯定是不固定的

start cmd /k "%~dp0安装.bat"
作者: 2010techon    时间: 2024-9-18 16:49
call没问题,改 start 就有问题,因为start启动一个独立的窗口运行指定程序,而原批处理不会等待调用结束,直接继续执行下面的语句,如果没有参数传递或者环境问题,就在每条start后面加延迟等待调用结束再执行下一条命令
作者: china.gaofeng    时间: 2024-9-18 16:52
鉴于你调用的批处理最终是如何退出的不可测,所以用call比start /wait更稳妥
作者: Allreal    时间: 2024-9-18 16:55
ut0 发表于 2024-9-18 16:01
试了一下,还是不行啊

如果不行,也许不是这个原因。
我这试了一下,是可以的。
作者: szwp    时间: 2024-9-18 18:42
echo on排错
作者: yzqmxh    时间: 2024-9-19 12:48
学习一下




欢迎光临 无忧启动论坛 (http://bbs.wuyou.net/) Powered by Discuz! X3.3