Board logo

标题: [文件操作] 批处理如何自动压缩和加日期? [打印本页]

作者: h3hlh18    时间: 2017-11-16 16:17     标题: 批处理如何自动压缩和加日期?

有个目录下很多子目录,需要定期以最大压缩率压缩成单独的压缩文件,用7z/winrar/winzip等等都可以,然后压缩好的文件需要加上当天日期。

例如abc,生成abc_171116.7z;xyz,生成xyz_171116.7z

我用几个压缩软件自带的参数不能实现。

请提供bat文件,非常感谢!
作者: lifei259    时间: 2017-11-16 16:48

本帖最后由 lifei259 于 2017-12-6 16:55 编辑
  1. @echo off
  2. set winrar="c:\Program Files\WinRAR\winrar.exe"
  3. set t=%date:~0,4%%date:~5,2%%date:~8,2%
  4. for /f "delims=" %%i in ('dir/ad/b') do (
  5. %winrar% a -r -m5 "%%i-%t%.rar" "%%i"
  6. )   
  7. pause
复制代码
放到和要压缩的子目录同文件夹下,执行,注意你的RAR目录
作者: h3hlh18    时间: 2017-11-16 17:31

我两台机器一台win7 64位提示如图。

一台win2012没错误提示但是没生成新文件。

winrar路径已改。
作者: Batcher    时间: 2017-11-19 11:35

回复 3# h3hlh18


推测应该是系统日期格式不同导致的问题
在CMD窗口执行这个命令看看吧 echo %date%

参考 http://bbs.bathome.net/thread-3328-1-1.html
作者: h3hlh18    时间: 2017-11-22 17:19

回复  h3hlh18


推测应该是系统日期格式不同导致的问题
在CMD窗口执行这个命令看看吧 echo %date%

...
Batcher 发表于 2017-11-19 11:35




我是这个,应该怎么改?多谢!
作者: search_Sudoku    时间: 2017-11-22 19:09

在 win7 测试, 对于其他系统版本以及进一步的要求, 请自行修改
  1. @echo off
  2. >nul chcp 936
  3. setlocal enableDelayedExpansion
  4. set "ftype=zip"
  5. REM 压缩比 0~5 可选, 0 最低, 5 最高
  6. set "mmode=5"
  7. REM 密码
  8. set "pwd=mypassword"
  9. REM 对目录压缩
  10. set "r_param=-r"
  11. cd /d "%~dp0"
  12. REM 生成随机标记串
  13. set "neorand=neorand_"
  14. for /l %%a in (1 1 5) do (
  15.     set "neorand=!neorand!!random:~-1!"
  16. )
  17. echo;随机标记串
  18. set neorand
  19. REM 搜索出 winrar 的全路径
  20. set "filename=winrar.exe"
  21. call :searchFile winrarFullname
  22. echo;winrar 的全路径
  23. echo;winrarFullname={!winrarFullname!}
  24. for /f "delims=" %%A in ('dir /ad /b') do (
  25.     echo;%%A
  26.     REM echo;"%winrarFullname%" a -ag-YYYYMMDD_HHMMSS -m%mmode% -af%ftype% "%%~dpA!neorand!%%~nxA.%ftype%" -p%pwd% %r_param% -ep1 "%%~A"
  27.     "%winrarFullname%" a -ag-YYYYMMDD_HHMMSS -m%mmode% -af%ftype% "%%~dpA!neorand!%%~nxA.%ftype%" -p%pwd% %r_param% -ep1 "%%~A"
  28.     REM 生成注释文件
  29.     > "%~dp0rarcomment.txt" (
  30.         echo;"%%~nxA.%ftype%" 生成于 %date%_%time%
  31.         echo;pwd
  32.         echo;!pwd!
  33.     )
  34.     REM 找出含有 随机标记串 前缀 日期时间 后缀 的压缩文件名
  35.     set "arcname="
  36.     for /f "delims=" %%a in ('dir /a-d /b "%%~dpA!neorand!%%~nxA*.%ftype%"') do (
  37.         if "!arcname!"=="" (
  38.             set "arcname=%%~fa"
  39.         )
  40.     )
  41.     REM echo;含有 随机标记串 前缀 日期时间 后缀 的压缩文件名
  42.     set arcname
  43.     REM 添加注释
  44.     "%winrarFullname%" c -z"%~dp0rarcomment.txt" "!arcname!"
  45.     del "%~dp0rarcomment.txt"
  46.     REM 去掉 随机标记串
  47.     for %%a in ("!arcname!") do (
  48.         echo;%%~nxa
  49.         set "fn=%%~nxa"
  50.         set "fn=!fn:~13!"
  51.     )
  52.     ren "!arcname!" "!fn!"
  53. )
  54. title 压缩包已经生成, 按任意键退出...
  55. <nul set /p "=压缩包已经生成, 按任意键退出..."
  56. if exist "%windir%\System32\timeout.exe" (
  57. timeout /t 10
  58. ) else (
  59. >nul pause
  60. )
  61. exit
  62. :searchFile winrarFullname
  63. REM ProgramData=C:\ProgramData
  64. REM ProgramFiles=C:\Program Files
  65. REM ProgramFiles(x86)=C:\Program Files (x86)
  66. REM ProgramW6432=C:\Program Files
  67. setlocal enableDelayedExpansion
  68. set "rt="
  69. for %%d in (C D E) do (
  70.     if "!rt!"=="" (
  71.         for %%V in ("ProgramFiles" "ProgramFiles(x86)" "ProgramData" "ProgramW6432") do (
  72.             if "!rt!"=="" if "!%%~V!" neq "" (
  73.                 for /f "delims=" %%p in ('dir "%%d!%%~V:~1!\!filename!" /a /s /b') do (
  74.                     if "!rt!"=="" if /i "%%~nxp"=="!filename!" (
  75.                         set "rt=%%~p"
  76.                     )
  77.                 )
  78.             )
  79.         )
  80.     )
  81. )
  82. if "!rt!"=="" (
  83.     for %%d in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
  84.         if "!rt!"=="" (
  85.             for /f "delims=" %%p in ('dir %%d:\"!filename!" /a /s /b') do (
  86.                 if "!rt!"=="" if /i "%%~nxp"=="!filename!" (
  87.                     set "rt=%%~p"
  88.                 )
  89.             )
  90.         )
  91.     )
  92. )
  93. ( ENDLOCAL & REM RETURN VALUES
  94.     IF "%~1" NEQ "" (SET %~1=%rt%) ELSE (echo;%rt%)
  95.     exit /b
  96. )
  97. exit /b
复制代码

作者: h3hlh18    时间: 2017-12-6 09:29

可以用,非常感谢楼上的!




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