Hysanohsp 发表于 2019-2-1 22:11:00

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

本帖最后由 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?mod=viewthread&tid=376688&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"
)

makimaki2 发表于 2019-2-1 22:11:01

本帖最后由 makimaki2 于 2019-2-3 02:32 编辑


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

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

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

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

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

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

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

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

REM 删除列表
del "%TempPath%\%TempFile%"




已在Win10下测试过

nttwqz 发表于 2019-2-1 22:21:07

ctrl+A
Enter

magicgenius 发表于 2019-2-1 22:37:11

dir d:\*.cmd /b>%temp%\a.cmd
%temp%\a.cmd

江南一根葱 发表于 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

vaf 发表于 2019-2-2 02:12:11

依次 call

maghreb 发表于 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 启动程序并等待其结束(再继续执行下一命令,如果有的话)

Hysanohsp 发表于 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文件但是不能被调用
谢谢了

Hysanohsp 发表于 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文件但是不能被调用
谢谢了

Hysanohsp 发表于 2019-2-2 16:06:08

magicgenius 发表于 2019-2-1 22:37
dir d:\*.cmd /b>%temp%\a.cmd
%temp%\a.cmd

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

窄口牛 发表于 2019-2-2 16:22:57

去掉参数不就不遍历子文件夹了?

magicgenius 发表于 2019-2-2 20:50:41

本帖最后由 magicgenius 于 2019-2-2 21:01 编辑

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


@echo off
cd /d d:\
for /f %%i in ('dir /b D:\*.cmd') do %%i

Hysanohsp 发表于 2019-2-3 09:42:47

frg521 发表于 2019-2-3 01:42
...

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

Hysanohsp 发表于 2019-2-3 09:57:49

makimaki2 发表于 2019-2-3 00:25
已在Win10下测试过

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

makimaki2 发表于 2019-2-3 16:11:47

本帖最后由 makimaki2 于 2019-2-3 16:17 编辑

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

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

日常工作案件中客户的需求往往是感觉不妥这样的无字天书
现实中的案件,能望闻问切 寻求关系条理,逐渐剥茧抽丝,披沙拣金
找出真正的Spec,便是功力的差异,与客户满意之所在
页: [1]
查看完整版本: 【傻瓜问题】如何运行某一目录下所有.cmd