[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] [已解决]求精减批处理用7Z压缩拖入文件夹下子文件夹

本帖最后由 smss 于 2019-5-11 20:43 编辑

用7Z压缩拖入文件夹下子文件夹
如果用for /d %%i in (*) do "%zip%" a "%1\%%i.zip" "%%i" 得到的是含子文件目录的压缩包 只能用最笨的方法逐个CD到对应文件夹再执行压缩命令 于是就有了如下的
  1. if exist %1\clock_2x4 (cd %1\clock_2x4&for /d %%i in (*) do "%zip%" a "%1\A\clock_2x4.zip" "%%i")
  2. if exist %1\com.android.calculator2 (cd %1\com.android.calculator2&for /d %%i in (*) do "%zip%" a "%1\A\com.android.calculator2.zip" "%%i")
  3. if exist %1\com.android.soundrecorder (cd %1\com.android.soundrecorder&for /d %%i in (*) do "%zip%" a "%1\A\com.android.soundrecorder.zip" "%%i")
  4. if exist %1\com.android.appshare (cd %1\com.android.appshare&for /d %%i in (*) do "%zip%" a "%1\A\com.android.appshare.zip" "%%i")
  5. if exist %1\com.android.contacts (cd %1\com.android.contacts&for /d %%i in (*) do "%zip%" a "%1\A\com.android.contacts.zip" "%%i")
  6. if exist %1\com.android.deskclock (cd %1\com.android.deskclock&for /d %%i in (*) do "%zip%" a "%1\A\com.android.deskclock.zip" "%%i")
  7. if exist %1\com.android.fileexplorer (cd %1\com.android.fileexplorer&for /d %%i in (*) do "%zip%" a "%1\A\com.android.fileexplorer.zip" "%%i")
复制代码
需求是打包%1下所有子文件夹(不包含子文件夹本身目录)

意思是每个 子文件夹 分别打包?如果我没理解错的话,试试下面这个:
  1. @echo off
  2. set zip="C:\Program Files\7-Zip\7z.exe"
  3. set directory="%~1"
  4. if not %directory%=="" (
  5. for /f %%i in ('dir /b /ad %1') do (
  6. %zip% a %%i %1\%%i
  7. )
  8. )
  9. pause
复制代码

TOP

本帖最后由 WHY 于 2019-5-10 15:13 编辑

7z a archive1.zip subdir\

adds all files and subfolders from folder subdir to archive archive1.zip. The filenames in archive will contain subdir\ prefix.

7z a archive2.zip .\subdir\*

adds all files and subfolders from folder subdir to archive archive2.zip. The filenames in archive will not contain subdir\ prefix.
  1. @echo off
  2. path "C:\Program Files (x86)\7-Zip\";%path%
  3. for /d %%i in ("E:\Test\*") do (
  4.     for /d %%j in ("%%i\*") do 7z a "%%j.zip" "%%j\*"
  5. )
  6. pause
复制代码

TOP

如果用for /d %%i in (*) do "%zip%" a "%1\%%i.zip" "%%i" 得到的是含子文件目录的压缩包
如下图

需要不含子文件目录的压缩包 就是不含图中的icons

不要包含icons目录 不要包含icons目录 不要包含icons目录

TOP

回复 4# smss


    #3难道不是这个意思吗?
如果是 WinRAR 的话,可以这样:
  1. @echo off
  2. path "C:\Program Files\WinRAR\";%path%
  3. for /d %%i in ("E:\Test\*") do (
  4.     for /d %%j in ("%%i\*") do WinRAR a -ep1 -afzip -r "%%j.zip" "%%j\*"
  5. )
  6. pause
复制代码
另外,不要用拖拽

TOP

本帖最后由 smss 于 2019-5-10 16:25 编辑

回复 5# WHY
for /d %%i in ("%1") do (for /d %%j in ("%%i\*") do "C:\Program Files\WinRAR\WinRAR.exe" a -ep1 -afzip -r "%%j.zip" "%%j\*")
7Z
for /d %%i in ("%1\*") do (for /d %%j in ("%%i\*") do "C:\Program Files\7-Zip\7z.exe" a "%%i.zip" "%%i\*")
调整之后最好的结果了

TOP

返回列表