2016-09-15 134 views
0

我有以下结构:从一个批处理文件,子文件夹中执行多个批处理文件

E: 
    parent 
    subfolder1 contains mybatch.bat 
    subfolder2 contains mybatch.bat 
    .... 
    subfoldern contains mybatch.bat 

文件夹的数量是动态的,名字是未知的,每天的文件夹名称中包含当天时间戳。

假设mybatch.bat只包含此

mkdir temp 

我想从每个子文件夹中执行所有的“mybatch.bat”。当我去到每个子文件夹并手动执行mybatch.bat时,一切正常,将在子文件夹中创建一个名为“temp”的文件夹。

我想要的是在每个文件夹内执行所有mybatch.bat的批处理文件,因此每个子文件夹中都会创建一个“temp”文件夹。我想这

cd E:\parent 
for /f %%f in ('dir /ad /b') do start %~dp0%%f\mybatch.bat 

的问题是,当我运行薄,一个临时文件夹在父文件夹中创建,并在子文件夹中创建什么。 我感谢帮助

感谢

+0

请注意相对路径!你正在混合不同的目录:'dir/ad/b'在当前工作目录下搜索(因为没有指定路径),但是你使用了'%〜dp0',这是这个批处理文件的父目录;只要这些tweo位置相同,一切都很好,但只要它们不同,就会遇到奇怪的问题......考虑使用'call'而不是'start',除非您真的想运行所有的批处理文件同时... – aschipfl

回答

2

我只是张贴这是一个解决方案,因为该代码不能正确适合评论。这样的事情呢?

@echo off 
setlocal enabledelayedexpansion 

set _ROOT="E:\parent" 

for /f "tokens=*" %%f in ('dir /ad /b !_ROOT!') do (
    pushd "!_ROOT:"=!\%%f" 
    call a.bat 
    popd 
) 

@ EDIT0

  • 执行内.BAT文件
  • 当取代callstart添加对于包含SPACE小号子目录支持。
+0

谢谢,这工作。但完成该过程后,所有mybatch.bat cmd窗口仍保持打开状态。我应该添加什么来最终让他们接近? – Alaeddin

+0

删除'开始'应该工作我猜... – geisterfurz007

+1

'调用a.bat'启动一个接一个的批处理文件;并行运行它们,使用'start'“cmd/C a.bat';不知道OP想要什么,但... – aschipfl