无忧启动论坛

 找回密码
 注册
搜索
最纯净的「微PE装机优盘」UEPON大师作品系统gho:最纯净好用系统下载站数据恢复、数据保护、视频编辑
Win To Go 极致利器(IXUNCIS固态U盘)无忧启动网成立20周年!广告联系 QQ:184822951 微信:wuyouceo
查看: 2695|回复: 23

[求助] 【傻瓜问题】如何运行某一目录下所有.cmd

[复制链接]
发表于 2019-2-1 22:11:00 | 显示全部楼层 |阅读模式
100无忧币
本帖最后由 Hysanohsp 于 2019-2-3 10:15 编辑

如题
现在在D:\下有多个.cmd文件 ,文件名未知批处理文件内容未知(可能包含exit语句且exit所在位置未知)
同时还会有不少子文件夹,里面也可能出现.cmd文件但是不能被运行
如:
Chrome\start.cmd  (不能被执行!)
TTplayer\start.cmd (不能被执行!)
1.cmd(需要执行)
2.cmd(需要执行)
3.cmd(需要执行)
InstallChrome.cmd(需要执行)
InstallTTPlayer.cmd(需要执行)
Office.cmd(需要执行)


现在需要依次执行这些批处理文件(非GUI,使用命令行可以调用),请问有什么办法吗


环境:Windows10核心 PE
(【wimboot】纯手工制作:Boot10 精简维护/网络/高端网络 三层映像(2017.10.30)
http://bbs.wuyou.net/forum.php?m ... &fromuid=678746

========================================================
最佳答案(经过楼主本人精简改善,已在win10+win7平台通过测试)
(discuz的code显示会吞掉\ ,所以这里用纯文本的形式展示出来)


dir /b "D:\*.cmd" >"D:\list.txt"
for /f  "usebackq" %%a in  ("D:\list.txt") do (
::并发处理使用此条:start "" /D "D:\" "%%a"
::依次处理使用此条:start /wait "" /D "D:\" "%%a"
  )

最佳答案

查看完整内容

已在Win10下测试过
发表于 2019-2-1 22:11:01 | 显示全部楼层
本帖最后由 makimaki2 于 2019-2-3 02:32 编辑

  1. @echo off
  2. REM ############################################
  3. REM 名称 ExcuteFolderBatch
  4. REM 功能 逐一执行目标路径所有批处理文件,并排除子文件夹,防Exit退出
  5. REM 版本 v0.1
  6. REM 作者 K
  7. REM 日期 2019-02-03
  8. REM 说明 本代码可重新配置参数,路径与名称可以包含空白,
  9. REM      并考虑到目标路径与本脚本运行位置可能无写入权限,此外本批处理去除路径耦合可放置任何位置运行
  10. REM ############################################

  11. REM =============用户配置=============
  12. REM 设定目标路径
  13. set TargetPath=D:

  14. REM 设定目标档名
  15. set TargetExt1=*.cmd
  16. set TargetExt2=*.bat

  17. REM 设置缓存路径
  18. set TempPath=%temp%

  19. REM 设置缓存档名
  20. set TempFile=List.txt

  21. REM =============命令运行=============
  22. REM 建立缓存文件夹
  23. MD "%TempPath%" >nul 2>nul

  24. REM 建立列表
  25. dir /b "%TargetPath%\%TargetExt1%" >"%TempPath%\%TempFile%"
  26. dir /b "%TargetPath%\%TargetExt2%" >>"%TempPath%\%TempFile%"

  27. REM 逐一执行列表程序
  28. for /f  "usebackq" %%a in  ("%TempPath%\%TempFile%") do (
  29. start "" /wait /D "%TargetPath%" "%%a"
  30.   )

  31. REM 删除列表
  32. del "%TempPath%\%TempFile%"


复制代码


已在Win10下测试过

点评

不过本人亲测在正常Windows10环境下此代码无法执行,将第37行改为 start "" /wait /D "%TargetPath%\" "%%a" 即可解决,或者查看我的回复  发表于 2019-2-3 10:02
感谢大大。鄙人对您的代码稍微精简了一下,现在已经可以正常使用了! 我觉得您是第一位真正解决了我的问题的,所以我决定将您的回答设置为最佳答案。同时也很感谢楼上诸位大大百忙之中抽空回答小弟的问题,同样表示  详情 回复 发表于 2019-2-3 09:57
回复

使用道具 举报

发表于 2019-2-1 22:21:07 | 显示全部楼层
ctrl+A
Enter
回复

使用道具 举报

发表于 2019-2-1 22:37:11 | 显示全部楼层
dir d:\*.cmd /b>%temp%\a.cmd
%temp%\a.cmd

点评

大大,这个方法在Windows10下没有用啊,您可以测试一下,辛苦啦  详情 回复 发表于 2019-2-2 16:06

评分

参与人数 1无忧币 +5 收起 理由
Hysanohsp + 5 感谢您的耐心解答!

查看全部评分

回复

使用道具 举报

发表于 2019-2-1 22:54:59 | 显示全部楼层
依次貌似是  for /f %%i in ('dir /b/s D:\*.cmd') do start "" /w %%i

同时貌似是 for /f %%i in ('dir /b/s D:\*.cmd') do start "" %%i

点评

大大,我的问题可能描述的不是很清楚,麻烦您重新看一下哈 for /f会遍历子文件夹。因为情况比较复杂,子文件夹内也可能有.cmd文件但是不能被调用 谢谢了  详情 回复 发表于 2019-2-2 16:03

评分

参与人数 1无忧币 +5 收起 理由
Hysanohsp + 5 感谢您的耐心解答!

查看全部评分

回复

使用道具 举报

发表于 2019-2-2 02:12:11 | 显示全部楼层
依次 call
回复

使用道具 举报

发表于 2019-2-2 07:55:48 来自手机 | 显示全部楼层
楼上说法都对
回复

使用道具 举报

发表于 2019-2-2 08:56:34 来自手机 | 显示全部楼层
可以合并,然后删除exit。
回复

使用道具 举报

发表于 2019-2-2 09:18:37 | 显示全部楼层
顺序有差别:for /f %%i in (2 1 3) do start "" /b /wait D:\%%i.cmd
依顺序执行2.cmd、1.cmd、3.cmd,限制是必须依顺序列出全部文件名。
顺序无差别:for /f %%i in (“*.cmd”) do start "" /b /wait D:\%%i
无序,不必列出全部文件名。
有/B 不创建不显示新命令黑窗
有/Wait 启动程序并等待其结束(再继续执行下一命令,如果有的话)

点评

大大,我的问题可能描述的不是很清楚,麻烦您重新看一下哈 for /f会遍历子文件夹。因为情况比较复杂,子文件夹内也可能有.cmd文件但是不能被调用 谢谢了  详情 回复 发表于 2019-2-2 16:04

评分

参与人数 1无忧币 +5 收起 理由
Hysanohsp + 5 感谢您的耐心解答!

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2019-2-2 16:03:49 | 显示全部楼层
江南一根葱 发表于 2019-2-1 22:54
依次貌似是  for /f %%i in ('dir /b/s D:\*.cmd') do start "" /w %%i

同时貌似是 for /f %%i in ('dir ...

大大,我的问题可能描述的不是很清楚,麻烦您重新看一下哈
for /f会遍历子文件夹。因为情况比较复杂,子文件夹内也可能有.cmd文件但是不能被调用
谢谢了
回复

使用道具 举报

 楼主| 发表于 2019-2-2 16:04:03 | 显示全部楼层
苏州本是 发表于 2019-2-2 09:18
顺序有差别:for /f %%i in (2 1 3) do start "" /b /wait D:\%%i.cmd
依顺序执行2.cmd、1.cmd、3.cmd,限 ...

大大,我的问题可能描述的不是很清楚,麻烦您重新看一下哈
for /f会遍历子文件夹。因为情况比较复杂,子文件夹内也可能有.cmd文件但是不能被调用
谢谢了
回复

使用道具 举报

 楼主| 发表于 2019-2-2 16:06:08 | 显示全部楼层
magicgenius 发表于 2019-2-1 22:37
dir d:\*.cmd /b>%temp%\a.cmd
%temp%\a.cmd

大大,这个方法在Windows10下没有用啊,您可以测试一下,辛苦啦

点评

cd /d d: for /f %%i in ('dir /b D:\*.cmd') do start %%i  详情 回复 发表于 2019-2-2 20:50
回复

使用道具 举报

发表于 2019-2-2 16:22:57 来自手机 | 显示全部楼层
去掉参数不就不遍历子文件夹了?
回复

使用道具 举报

发表于 2019-2-2 20:50:41 | 显示全部楼层
本帖最后由 magicgenius 于 2019-2-2 21:01 编辑
Hysanohsp 发表于 2019-2-2 16:06
大大,这个方法在Windows10下没有用啊,您可以测试一下,辛苦啦


  1. @echo off
  2. cd /d d:\
  3. for /f %%i in ('dir /b D:\*.cmd') do %%i
复制代码

评分

参与人数 1无忧币 +5 收起 理由
Hysanohsp + 5 感谢您的耐心解答!

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2019-2-3 09:42:47 | 显示全部楼层

感谢了,本人学识浅薄,有很多地方没有注意,如果下次有提问一定改正,还望海涵
回复

使用道具 举报

 楼主| 发表于 2019-2-3 09:57:49 | 显示全部楼层
makimaki2 发表于 2019-2-3 00:25
已在Win10下测试过

感谢大大。鄙人对您的代码稍微精简了一下,现在已经可以正常使用了!
我觉得您是第一位真正解决了我的问题的,所以我决定将您的回答设置为最佳答案。同时也很感谢楼上诸位大大百忙之中抽空回答小弟的问题,同样表示感谢!
  1. dir /b "D:\*.cmd" >"D:\list.txt"
  2. for /f  "usebackq" %%a in  ("D:\list.txt") do (
  3. start "" /D "D:" "%%a"
  4. ::上面是并发处理的语句,需要依次处理请使用下面的语句(给start追加/wait参数)
  5. ::start /wait "" /D "D:" "%%a"
  6. )
复制代码
回复

使用道具 举报

发表于 2019-2-3 16:11:47 | 显示全部楼层
本帖最后由 makimaki2 于 2019-2-3 16:17 编辑

问题能解决工作顺利便是最好,
悬赏金也请务必记得

工具人人会用,上网搜索资料都有,知识性遍地都是搜索就有的东西往往没有价值
客户如果能明确开出规格,那自己写就好何必发案,
知己有所不足所以寻求解决方案是很普通很正常的事

日常工作案件中客户的需求往往是感觉不妥这样的无字天书
现实中的案件,能望闻问切 寻求关系条理,逐渐剥茧抽丝,披沙拣金
找出真正的Spec,便是功力的差异,与客户满意之所在
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2020-12-1 07:56

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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