如何遍历Windowsbatch file中的文件夹树/子树?

Windowsbatch file中,有没有办法遍历文件夹/子文件夹层次结构,对每个文件执行一些操作?

Solutions Collecting From Web of "如何遍历Windowsbatch file中的文件夹树/子树?"

是的,你可以使用for命令和/r开关来做到这一点,例如:

 for /r %%f in (*) do echo %%f 

举一个例子来看这个问题 。

您可以使用/r开关使用FOR命令,该命令将执行目录树,执行您在每个目录的DO语句中指定的内容。 在那里你可以嵌套另一个FOR语句,在SET块中使用dir /b *.*

幸运的是,对于这个线程,我有非常相似的目的。 我相信INSTRUCTION

 dir /b /s /ad *.* [enter] 

结果会产生DIRECTORY TREE

 complete_path\dir_01_lev_01 complete_path\dir_02_lev_01 complete_path\dir_03_lev_01 complete_path\dir_01_lev_01\dir_11_lev_02 complete_path\dir_01_lev_01\dir_12_lev_02 complete_path\dir_02_lev_01\dir_13_lev_02 complete_path\dir_02_lev_01\dir_14_lev_02 complete_path\dir_02_lev_01\dir_15_lev_02 complete_path\dir_03_lev_01\dir_16_lev_02 

但是我想要的结果如下

 complete_path\dir_01_lev_01 complete_path\dir_01_lev_01\dir_11_lev_02 complete_path\dir_01_lev_01\dir_12_lev_02 complete_path\dir_02_lev_01 complete_path\dir_02_lev_01\dir_13_lev_02 complete_path\dir_02_lev_01\dir_14_lev_02 complete_path\dir_02_lev_01\dir_15_lev_02 complete_path\dir_03_lev_01 complete_path\dir_03_lev_01\dir_16_lev_02 

所以,这个脚本是BORN 🙂

 @echo off rem rem ::: My name is Tree-Folder-8-Level.cmd rem setlocal rem ::: Put started PATH here set i01=complete_path for /f "delims=" %%a in ('dir "%i01%" /ad /on /b') do call :p001 "%%a" endlocal goto :eof :p001 rem ::: Display 1st LEVEL of started PATH echo %~1 for /f "delims=" %%b in ('dir "%i01%\%~1" /ad /on /b') do call :p002 "%~1\%%b" goto :eof :p002 rem ::: Display 2nd LEVEL of started PATH echo %~1 for /f "delims=" %%c in ('dir "%i01%\%~1" /ad /on /b') do call :p003 "%~1\%%c" goto :eof :p003 rem ::: Display 3rd LEVEL of started PATH echo %~1 for /f "delims=" %%d in ('dir "%i01%\%~1" /ad /on /b') do call :p004 "%~1\%%d" goto :eof :p004 rem ::: Display 4th LEVEL of started PATH echo %~1 for /f "delims=" %%e in ('dir "%i01%\%~1" /ad /on /b') do call :p005 "%~1\%%e" goto :eof :p005 rem ::: Display 5th LEVEL of started PATH echo %~1 for /f "delims=" %%f in ('dir "%i01%\%~1" /ad /on /b') do call :p006 "%~1\%%f" goto :eof :p006 rem ::: Display 6th LEVEL of started PATH echo %~1 for /f "delims=" %%g in ('dir "%i01%\%~1" /ad /on /b') do call :p007 "%~1\%%g" goto :eof :p007 rem ::: Display 7th LEVEL of started PATH rem ::: and 8th LEVEL of started PATH echo %~1 for /f "delims=" %%h in ('dir "%i01%\%~1" /ad /on /b') do echo %~1\%%h goto :eof 

欢迎更明亮的想法。 🙂

 dir /b /s /ad *.* | sort 

无论路径深度如何,这应该会得到相同的结果