批量递归文件夹&填充数组

时间:2016-07-21 18:17:54

标签: arrays batch-file recursion

我希望通过文件夹/子文件夹/等进行递归。 &安培;用动态填充包含文件夹路径的数组。

示例:我有一个名为" A"的文件夹。它有2个子文件夹" B" &安培; " C&#34 ;. " C"有一个子文件夹" D"。所以数组将是:

Folder[01]=A
Folder[02]=A/B
Folder[03]=A/C
Folder[04]=A/C/D

FOR / D命令能否满足我的需要?如果是这样,我该怎么做循环得到的&将它添加到数组?不幸的是必须批量生产。谢谢!

1 个答案:

答案 0 :(得分:3)

如何动态地使用文件夹路径填充数组。

使用以下批处理文件(MakeFolderArray.cmd):

@echo off
setlocal enabledelayedexpansion
rem get length of %cd% (the current directory)
call :strlen cd _length
set /a _index=1
for /d /r %%a in (*) do (
  set _name=%%a
  rem remove everything from the drive root up to the current directory, 
  rem which is _length chars
  call set _name=!!_name:~%_length%!!
  rem replace \ with /
  set _name=!_name:\=/!
  set Folder[0!_index!]=!_name!
  set /a _index+=1
  )
set /a _index-=1
for /l %%i in (1,1,%_index%) do (
  echo Folder[0%%i]=!Folder[0%%i]!
  )
endlocal
goto :eof

:strLen  strVar  [rtnVar]
setlocal disableDelayedExpansion
set len=0
if defined %~1 for /f "delims=:" %%N in (
  '"(cmd /v:on /c echo(!%~1!&echo()|findstr /o ^^"'
) do set /a "len=%%N-3"
endlocal & if "%~2" neq "" (set %~2=%len%) else echo %len%
exit /b

示例:

F:\test>MakeFolderArray
Folder[01]=/A
Folder[02]=/A/B
Folder[03]=/A/C
Folder[04]=/A/C/D

现金:

感谢dbenham来自this answerstrlen代码(如果字符串包含\个字符,则会有效)。

进一步阅读

  • An A-Z Index of the Windows CMD command line - 与Windows cmd相关的所有内容的绝佳参考。
  • dir - 显示文件和子文件夹列表。
  • for /l - 有条件地为一系列数字执行命令。
  • for /d - 有条件地在多个目录/文件夹上执行命令。
  • set - 显示,设置或删除CMD环境变量。使用SET进行的更改将仅在当前CMD会话期间保留。
  • variable edit/replace - 编辑并替换分配给字符串变量的字符。
  • variables - 提取变量(子串)的一部分。