以批处理方式递归迭代目录

时间:2013-06-09 14:49:07

标签: batch-file

情况如下: 我有一个包含许多带pdf文件的子文件夹的文件夹。我想创建一个遍历每个子文件夹的批处理脚本,并压缩pdf文件,如果有超过100个(使用7Zip,而不是寻求该部分的帮助)。

这是我第一次处理Windows批处理脚本,我非常沮丧。我在谷歌上花了几个小时,我觉得我对这个问题没什么好看的。我已经找到了很多参考资料和示例代码,但没有在示例中逐字逐句细分。我发现语法非常不友好。

无论如何,这就是我所拥有的:

@echo off
for /r %%A in (.) do (
set pdfCount = "Code that gets the total number of pdf files in current directory, something like dir *.pdf?"
if pdfCount GEQ 100 (
set beginDate = "Code that gets the date of the oldest pdf, use in the zip file name"
set endDate = "Code that gets the date of the newest pdf, use in the zip file name" 
"Use a 7Zip command to zip the files, I am not asking for help with this code"
DEL *.pdf
echo %pdfcount% files zipped in "Code for current directory"  
)
) 
pause

我的理解是“for / r %% A in(。)do()”应该执行每个子目录中的代码。

2 个答案:

答案 0 :(得分:0)

这可能有用。它不具有破坏性,而且只是将7zip和参数与屏幕相呼应。

@echo off
for /f "delims=" %%a in ('dir /b /ad /s') do (
   pushd "%%a"
    for /f %%b in ('dir *.pdf  /b ^|find /c /v "" ') do (
      if %%b GTR 100 echo 7zip a "%%~nxa.7z" "*.pdf"
    )
   popd
)

它占用当前目录树中的所有文件夹,推送堆栈中的目录使其成为当前目录,使用dir并查找计算PDF文件,如果结果大于100,它将回显该行到安慰。并且popd再次将目录从堆栈中弹出。 7z文件将在包含PDF文件的文件夹中创建,除非您为其指定位置,否则它们将获得folders name.7z

答案 1 :(得分:0)

此脚本依赖于区域设置,这意味着它取决于计算机上日期和时间的格式。我的机器使用mm/dd/yyyy hh:mm am格式。该脚本将创建名称格式为PDF yyyy_mm_dd yyyy_mm_dd.7z

的zip文件
@echo off
setlocal disableDelayedExpansion
for /r /d %%P in (*) do (
  set "beg="
  set /a cnt=0
  pushd "%%P"
  for /f "eol=: delims=" %%F in ('dir /b /a-d /od *.pdf 2^>nul') do (
    set /a cnt+=1
    set "end=%%~tF"
    if not defined beg set "beg=%%~tF"
  )
  setlocal enableDelayedExpansion
  if !cnt! gtr 100 (
    for /f "tokens=1-6 delims=/ " %%A in ("!beg:~0,10! !end!") do (
      7zip a "PDF %%C_%%A_%%B %%F_%%D_%%E.7z" *.pdf
      del *.pdf
    )
  )
  endlocal
  popd
)