无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 246|回复: 20
打印 上一主题 下一主题

[求助] 关于批处理里调用批处理失败的问题

  [复制链接]
跳转到指定楼层
1#
发表于 前天 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路径,所以就失败了

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

2#
发表于 前天 13:34 | 只看该作者
本帖最后由 yyz2191958 于 2024-9-18 13:42 编辑

按照下面形式试一试:

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

点评

ut0
对,因为是在U盘下面运行,所以盘符和路径肯定是不固定的  详情 回复 发表于 前天 15:09
楼主可能想在任意目录能运行。  详情 回复 发表于 前天 14:18
回复

使用道具 举报

3#
发表于 前天 14:17 | 只看该作者
本帖最后由 Allreal 于 2024-9-18 14:21 编辑

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

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

点评

ut0
试了一下,还是不行啊  详情 回复 发表于 前天 16:01
回复

使用道具 举报

4#
发表于 前天 14:18 | 只看该作者
yyz2191958 发表于 2024-9-18 13:34
按照下面形式试一试:

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

楼主可能想在任意目录能运行。

点评

可以的  详情 回复 发表于 前天 16:33
回复

使用道具 举报

5#
发表于 前天 14:30 | 只看该作者
好好的瞎改什么

首选简单说一下start和call的区别,一个重要的功能就是,call可以让主程序暂停, 等待子程序运行结束。
start 不加参数,直接无视等待,同时运行多个子程序的同时,主程序会继续向下运行。
所以你的多个子程序如果是有变量传递,那就只能用call,不能用start同时运行,后面的子程序无法得到变量,自然运行了也就是错的。

点评

ut0
对,我改成start命令就是一是不像等待副批处理运行,二是想根据情况,单独运行某些批处理 然后就是在来回跳转目录的时候,出了问题,不知道怎样才可以返回原路径继续执行命令  详情 回复 发表于 前天 16:04
回复

使用道具 举报

6#
发表于 前天 15:04 | 只看该作者
学习一下
回复

使用道具 举报

7#
 楼主| 发表于 前天 15:09 | 只看该作者
yyz2191958 发表于 2024-9-18 13:34
按照下面形式试一试:

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

对,因为是在U盘下面运行,所以盘符和路径肯定是不固定的

点评

start cmd /k "%~dp0安装.bat"  详情 回复 发表于 前天 16:35
回复

使用道具 举报

8#
发表于 前天 15:19 | 只看该作者
学习来了,必须指定路径?
回复

使用道具 举报

9#
发表于 前天 15:29 来自手机 | 只看该作者
start “” “文件路径”,前面那对冒号最好不要省略掉,可以没有引起来的标题名。
回复

使用道具 举报

10#
 楼主| 发表于 前天 16:01 | 只看该作者
Allreal 发表于 2024-9-18 14:17
按楼主的猜疑,试试在dismadd.bat首行加入:
path=%windir%\system32

试了一下,还是不行啊

点评

如果不行,也许不是这个原因。 我这试了一下,是可以了。  详情 回复 发表于 前天 16:55
回复

使用道具 举报

11#
 楼主| 发表于 前天 16:04 | 只看该作者
ppll2030 发表于 2024-9-18 14:30
好好的瞎改什么

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

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

然后就是在来回跳转目录的时候,出了问题,不知道怎样才可以返回原路径继续执行命令
回复

使用道具 举报

12#
发表于 前天 16:04 | 只看该作者
本帖最后由 wjgyz740526 于 2024-9-18 16:05 编辑

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

点评

ut0
dism命令是主批处理调用的命令,我个人是想把有些dism命令单独提出来写到一起的 但又想在运行其他批处理的时候一起调用运行了 目录没有空格的,就在U盘根目录下的,文件名也都没有空格  详情 回复 发表于 前天 16:10
回复

使用道具 举报

13#
发表于 前天 16:07 | 只看该作者
学习了
回复

使用道具 举报

14#
 楼主| 发表于 前天 16:10 | 只看该作者
wjgyz740526 发表于 2024-9-18 16:04
既然只是dism,为什么不直接把命令放在主程序里面?要这么间接调用?
如果目录有空格,cd /d %~dp0可能要 ...

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

目录没有空格的,就在U盘根目录下的,文件名也都没有空格
回复

使用道具 举报

15#
发表于 前天 16:33 | 只看该作者
Allreal 发表于 2024-9-18 14:18
楼主可能想在任意目录能运行。

可以的
回复

使用道具 举报

16#
发表于 前天 16:35 | 只看该作者
ut0 发表于 2024-9-18 15:09
对,因为是在U盘下面运行,所以盘符和路径肯定是不固定的

start cmd /k "%~dp0安装.bat"
回复

使用道具 举报

17#
发表于 前天 16:49 | 只看该作者
call没问题,改 start 就有问题,因为start启动一个独立的窗口运行指定程序,而原批处理不会等待调用结束,直接继续执行下面的语句,如果没有参数传递或者环境问题,就在每条start后面加延迟等待调用结束再执行下一条命令
回复

使用道具 举报

18#
发表于 前天 16:52 | 只看该作者
鉴于你调用的批处理最终是如何退出的不可测,所以用call比start /wait更稳妥
回复

使用道具 举报

19#
发表于 前天 16:55 | 只看该作者
ut0 发表于 2024-9-18 16:01
试了一下,还是不行啊

如果不行,也许不是这个原因。
我这试了一下,是可以的。
回复

使用道具 举报

20#
发表于 前天 18:42 来自手机 | 只看该作者
echo on排错
回复

使用道具 举报

21#
发表于 昨天 12:48 | 只看该作者
学习一下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-9-20 07:32

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表