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文件但是不能被调用
谢谢了
页: [1] 2
查看完整版本: 【傻瓜问题】如何运行某一目录下所有.cmd