2016-02-23 239 views
2

我有一個批處理文件,當前將每個文件放在一個文件夾中的文件名稱。但它只適用於我所在的文件夾。我想在我的目錄的頂部有一個批處理文件,它只會執行文件2子文件夾。目錄範例:批處理文件將文件放入文件夾(僅子文件夾)

/Parent folder **This is where I want my batch file** 
    /Subfolder 1 
    /Subfolder 1A/file.jpg **Level I want batch file to execute** 
    /Subfolder 1B/file.mp4 **Level I want batch file to execute** 
    /Subfolder 1C/file.mp3 **Level I want batch file to execute** 
    /Subfolder 2 
    /Subfolder 2A/file.jpg **Level I want batch file to execute** 
    /Subfolder 2B/file.mp4 **Level I want batch file to execute** 
    /Subfolder 2C/file.mp3 **Level I want batch file to execute** 

這是我目前的批處理文件:

@echo off 
for %%a in (*.*) do (
    md "%%~na" 2>nul 
    move "%%a" "%%~na" 
) 
+0

你想要批處理文件做什麼? – SomeDude

+0

我希望它將每個文件放入與文件名稱相同的文件夾中。當前的批處理文件我這樣做,但只在當前文件夾中。 –

+0

因此,例如你想'子文件夾1A'中的'file.jpg'進入'子文件夾1A /文件/'? – SomeDude

回答

1

使用與/ d選項來遍歷文件夾,重複進行儘可能多層次循環。在每一步使用PUSHD,以便您不必跟蹤完整路徑。

@echo off 
for /d %%a in (*) do (
    pushd "%%a" 
    for /d %%b in (*) do (
    pushd "%%b" 
    for %%c in (*) do (
     md "%%~nc" 2>nul 
     move "%%c" "%%~nc" 
    ) 
    popd 
) 
    popd 
) 

您可以使用%~dp0,確保您在開始的批處理腳本的父文件夾:

@echo off 
for /d %%a in ("%~dp0*") do (
    pushd "%%a" 
    for /d %%b in (*) do (
    pushd "%%b" 
    for %%c in (*) do (
     md "%%~nc" 2>nul 
     move "%%c" "%%~nc" 
    ) 
    popd 
) 
    popd 
) 

代碼變得乏味,你添加更多的級別。您可以使用遞歸編寫更通用的代碼,這些代碼可以輕鬆更改爲在任何子文件夾深度工作。只需根據需要更改深度值。請注意,如何在嵌套的FOR循環中重新使用字母。

@echo off 
setlocal disableDelayedExpansion 
set depth=2 

:iterateFolders 
setlocal 
set /a depth-=1 
for /d %%F in (*) do (
    pushd "%%F" 
    if %depth% gtr 0 (
    call :iterateFolders 
) else for %%F in (*) do (
    md "%%~nF" 2>nul 
    move "%%F" "%%~nF" 
) 
    popd 
) 
exit /b 
+0

非常感謝dbenham的工作,這將節省很多時間。 –

相關問題