2016-09-15 190 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

相關問題