Board logo

标题: 【30元】压缩文件校验 [打印本页]

作者: bat小猎手    时间: 2022-1-9 19:57     标题: 【30元】压缩文件校验

一共含有四个文件夹。keep live。gooy fun
四个文件夹内文件格式为 .txt
数量上 live 和gooy 文件数量大于等于一小于等于15

live文件夹内必须要有 oner.txt

gooy内文件名dod.txt sds.txt
fun 内文件名vcv.txt xcd.txt
如果gooy fun 无文件不做压缩

最后使用7z进行压缩
作者: zaqmlp    时间: 2022-1-9 20:46

说明不清晰
是每个文件夹的条件都符合才全部打包到一起,还是每个文件夹的条件只要符合各自条件则分别将自身打包成一个,或者是其他要求??
作者: flashercs    时间: 2022-1-9 20:46

  1. @echo off
  2. cd /d "%~dp0"
  3. set z7="C:\Program Files\7-Zip\7z.exe"
  4. set archive="压缩包.7z"
  5. set folders=keep\ live\ gooy\ fun\
  6. for %%A in (%folders%) do (
  7.   if not exist "%%A" (
  8.     echo 文件夹 "%%A" 不存在
  9.     pause
  10.     exit /b
  11.   )
  12. )
  13. set ctr=0
  14. for %%A in ("live\*.txt") do (
  15.   set /a ctr+=1
  16. )
  17. if %ctr% lss 1 echo 文件夹 live 文件数量小于1 & pause & exit /b
  18. if %ctr% gtr 15 echo 文件夹 live 文件数量大于15 & pause & exit /b
  19. set ctr=0
  20. for %%A in ("gooy\*.txt") do (
  21.   set /a ctr+=1
  22. )
  23. if %ctr% lss 1 echo 文件夹 gooy 文件数量小于1 & pause & exit /b
  24. if %ctr% gtr 15 echo 文件夹 gooy 文件数量大于15 & pause & exit /b
  25. for %%A in ("live\oner.txt" "gooy\dod.txt" "gooy\sds.txt" "fun\vcv.txt" "fun\xcd.txt") do (
  26.   if not exist %%A echo %%A 不存在. & pause & exit /b
  27. )
  28. set ctr=0
  29. for %%A in ("fun\*.txt") do (
  30.   set /a ctr+=1
  31. )
  32. if %ctr% equ 0 echo 文件夹 fun 文件数量小于1 & pause & exit /b
  33. %z7% a %archive% %folders%
  34. pause
  35. exit /b
复制代码

作者: zaqmlp    时间: 2022-1-9 20:51

  1. @echo off&cd /d "%~dp0"
  2. set "exefile=D:\Program Files\Toolbox\7-Zip\7z.exe"
  3. set folder="keep" "live" "gooy" "fun"
  4. if not exist "%exefile%" (echo;"%exefile%" no found&pause&exit)
  5. set "f="
  6. for %%a in (%folder%) do (
  7.     set n=0
  8.     for /f "delims=" %%b in ('dir /a-d/b "%%~a\" 2^>nul') do (
  9.         if /i "%%~xb" neq ".txt" (
  10.             set f=1
  11.         ) else (
  12.             set /a n+=1
  13.         )
  14.     )
  15.     if /i "%%~a" equ "live" (
  16.         setlocal enabledelayedexpansion
  17.         if !n! equ 0 set f=1
  18.         if !n! gtr 15 set f=1
  19.         endlocal
  20.     )
  21.     if /i "%%~a" equ "gooy" (
  22.         setlocal enabledelayedexpansion
  23.         if !n! equ 0 set f=1
  24.         if !n! gtr 15 set f=1
  25.         endlocal
  26.     )
  27. )
  28. if not exist "live\oner.txt" set f=1
  29. for %%a in (
  30. "dod.txt"
  31. "sds.txt"
  32. ) do (if not exist "gooy\%%~a" set f=1)
  33. for %%a in (
  34. "vcv.txt"
  35. "xcd.txt"
  36. ) do (if not exist "fun\%%~a" set f=1)
  37. if not defined f (
  38.     "%exefile%" a -y "out.7z" %folder%
  39. )
  40. pause
  41. exit
复制代码

作者: Batcher    时间: 2022-1-9 20:57

回复 1# bat小猎手
  1. @echo off
  2. cd /d "%~dp0"
  3. set "ExecFlag=1"
  4. if exist "C:\Program Files\7-Zip\7z.exe" (
  5.     set "My7z=C:\Program Files\7-Zip\7z.exe"
  6. ) else if exist "C:\Program Files (x86)\7-Zip\7z.exe" (
  7.     set "My7z=C:\Program Files (x86)\7-Zip\7z.exe"
  8. ) else (
  9.     echo 找不到 7z.exe
  10.     goto :End
  11. )
  12. echo %My7z%
  13. REM 后缀名检查
  14. for %%i in (keep live gooy fun) do (
  15.     for /f "delims=" %%j in ('dir /b /a-d "%%i" 2^>nul') do (
  16.         if /i "%%~xj" neq ".txt" (
  17.             echo 存在后缀名不为txt的文件 %%i\%%j
  18.             set "ExecFlag=0"
  19.         )
  20.     )
  21. )
  22. REM 文件夹下面的文件数量检查
  23. set "FileMin=1"
  24. set "FileMax=15"
  25. set "FileCount=0"
  26. for /f "delims=" %%i in ('dir /b /a-d live\*.* 2^>nul') do (
  27.     set /a FileCount+=1
  28. )
  29. if %FileCount% lss %FileMin% (
  30.     echo live 文件夹下面的文件[%FileCount%个]少于[%FileMin%个]
  31.     set "ExecFlag=0"
  32. ) else if %FileCount% gtr %FileMax% (
  33.     echo live 文件夹下面的文件[%FileCount%个]多于[%FileMax%个]
  34.     set "ExecFlag=0"
  35. )
  36. set "FileCount=0"
  37. for /f "delims=" %%i in ('dir /b /a-d gooy\*.* 2^>nul') do (
  38.     set /a FileCount+=1
  39. )
  40. if %FileCount% lss %FileMin% (
  41.     echo gooy 文件夹下面的文件[%FileCount%个]少于[%FileMin%个]
  42.     set "ExecFlag=0"
  43. ) else if %FileCount% gtr %FileMax% (
  44.     echo gooy 文件夹下面的文件[%FileCount%个]多于[%FileMax%个]
  45.     set "ExecFlag=0"
  46. )
  47. REM 特定文件名检查
  48. for %%i in (dod.txt sds.txt) do (
  49.     if not exist "gooy\%%i" (
  50.         echo 缺少文件 gooy\%%i
  51.         set "ExecFlag=0"
  52.     )
  53. )
  54. for %%i in (vcv.txt xcd.txt) do (
  55.     if not exist "fun\%%i" (
  56.         echo 缺少文件 fun\%%i
  57.         set "ExecFlag=0"
  58.     )
  59. )
  60. echo 压缩条件 %ExecFlag%
  61. if %ExecFlag% equ 1 (
  62.     "%My7z%" a keep.zip .\keep\
  63.     "%My7z%" a live.zip .\live\
  64.     "%My7z%" a gooy.zip .\gooy\
  65.     "%My7z%" a fun.zip .\fun\
  66. ) else (
  67.     goto :End
  68. )
  69. :End
  70. pause
复制代码





欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2