找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 27145|回复: 6

[文件操作] 批处理如何自动压缩和加日期?

[复制链接]
发表于 2017-11-16 16:17:40 | 显示全部楼层 |阅读模式
有个目录下很多子目录,需要定期以最大压缩率压缩成单独的压缩文件,用7z/winrar/winzip等等都可以,然后压缩好的文件需要加上当天日期。

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

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

请提供bat文件,非常感谢!
发表于 2017-11-16 16:48:26 | 显示全部楼层
本帖最后由 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目录
 楼主| 发表于 2017-11-16 17:31:33 | 显示全部楼层
我两台机器一台win7 64位提示如图。

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

winrar路径已改。
发表于 2017-11-19 11:35:24 | 显示全部楼层
回复 3# h3hlh18


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

参考 http://bbs.bathome.net/thread-3328-1-1.html
 楼主| 发表于 2017-11-22 17:19:45 | 显示全部楼层
回复  h3hlh18


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

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




我是这个,应该怎么改?多谢!
发表于 2017-11-22 19:09:38 | 显示全部楼层
在 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








复制代码

评分

参与人数 1技术 +1 收起 理由
h3hlh18 + 1 可以用

查看全部评分

 楼主| 发表于 2017-12-6 09:29:05 | 显示全部楼层
可以用,非常感谢楼上的!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 03:07 , Processed in 0.021788 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表