3

情况是这样的:我有一个文件夹,里面有很多带有 pdf 文件的子文件夹。我想制作一个遍历每个子文件夹的批处理脚本,如果 pdf 文件超过 100 个(使用 7Zip,不寻求该部分的帮助),则压缩 pdf 文件。

这是我第一次处理 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 ()”应该执行每个子目录中的代码。

4

2 回答 2

0

这可能有效。它不是破坏性的,atm 只是将 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 和 find 计算 PDF 文件,如果结果大于 100,它将将该行回显到控制台。然后 popd 再次将目录从堆栈中弹出。7z 文件将在包含 PDF 文件的文件夹中创建,并且它们会获得folders name.7z,除非您为它们指定位置。

于 2013-06-09T15:27:15.060 回答
0

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

@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
)
于 2013-06-09T16:13:45.740 回答