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

[文件操作] 能否使用7z直接汇总子文件夹后再分卷+加密打包

本帖最后由 5i365 于 2021-12-25 08:58 编辑

情况描述如下:
一个主文件夹 1
其下有两个子文件夹 A  和  B
A文件夹下有 A1, A2, A3 ..... 等N个子文件夹
B文件夹下有 B1, B2, B3 ..... 等N个子文件夹

我想使用7z 把A和B下的所有子文件夹打包成1.zip, 解压密码 123
即: 把 A1, A2, A3, B1, B2, B3....  打包成1.zip
另外, 如果打包成一个zip文件, 就太大了, 所以打包时按每卷 1023m 来打包
找到下面一个批处理, 它是一个文件夹一个包, 没有将所有子文件夹汇总的参数和压缩时分卷的参数,求高手指点, 感谢!

@echo off
cd /d "%~dp0"
for /f "delims=" %%i in ('dir /b /ad') do (
    "C:\Program Files\7-Zip\7z.exe" a "%%i.7z" "%%i" -p123
)

回复 52# idwma


    哇塞, 还真行了, 看来真是PS版本的问题

TOP

回复 51# 5i365
  1. powershell -version 2.0 "&'C:\Program Files\7-Zip\7z.exe' a all.7z $(dir|where{$_.PSIsContainer}|foreach{$a+='{0}.\{1}\*{0} ' -f [char]34,$_};$a)"
  2. pause
复制代码

TOP

回复 57# idwma


    刚看到, 试了一下, 还是不行, 和以前的一样的效果

TOP

回复 54# idwma


    Windows PowerShell
Copyright (C) 2016 Microsoft Corporation. All rights reserved.

PS C:\Users\Administrator> Get-Host


Name             : ConsoleHost
Version          : 5.1.14409.1018
InstanceId       : 3cb1758e-c30e-44ba-87d2-02b30543038a
UI               : System.Management.Automation.Internal.Host.InternalHostUserInterface
CurrentCulture   : zh-CN
CurrentUICulture : zh-CN
PrivateData      : Microsoft.PowerShell.ConsoleHost+ConsoleColorProxy
DebuggerEnabled  : True
IsRunspacePushed : False
Runspace         : System.Management.Automation.Runspaces.LocalRunspace



PS C:\Users\Administrator>

TOP

回复 54# idwma


    好奇怪

TOP

回复 52# idwma


   

TOP

回复 50# idwma


    我这里不行, 我的子文件夹的名字 类似这样的  
新建文件夹B - 副本 (2)

TOP

回复 48# idwma


powershell "&'C:\Program Files\7-Zip\7z.exe' a all.7z $(dir|where{$_.PSIsContainer}|foreach{$a+="'\"'+'.\'+$_+'\*'+'\" '" };$a)"
上面能生成all.7z 但是里面是空的, 执行信息里有未找到文件夹的提示

powershell "& dir|where{$_.PSIsContainer}|foreach{$a+="'\"'+'.\'+$_+'\*'+'\" '" };$a"
上面可以并排显示所有子文件夹的信息

powershell "& (dir -dir).name | foreach{ $a+=' "{0}" ' -f ".\$_\*" };$a"
上面的代码好理解和第二行的代码作用一样, 但是执行时出错, 可能是您提到的win7不支持什么的原因

TOP

本帖最后由 5i365 于 2022-1-8 11:27 编辑

回复 43# idwma


    我想分步实现, 但是下面也无回显:
@echo off
for /f %%i in ('(dir -dir).name ^| foreach{ $a+=' "{0}" ' -f ".\$_\*" };$a') do (set s=%%i)
echo %s%
pause

TOP

本帖最后由 5i365 于 2022-1-8 11:04 编辑

回复 45# idwma


    批处理中执行, 一闪而关, 我改成下面也不行:
powershell "&{'C:\Program Files\7-Zip\7z.exe' a "all.7z" $((dir -dir).name | %{ $a+=' "{0}" ' -f ".\$_\*" }) -p123 -v1023m}"

TOP

回复 43# idwma


    这个代码不错,怎样在上面的批处理下使用呢?
另外%和foreach我在win7好像都可以运行

TOP

回复 41# 5i365


    放到bat出错%改成foreach就好了
显示不一样,结果是一样的,win7自带的没有这个参数
  1. (dir -dir).name | %{ $a+=' "{0}" ' -f ".\$_\*" }
  2. $a
复制代码

TOP

本帖最后由 5i365 于 2022-1-7 08:31 编辑

回复 39# idwma


    我把代码改成下面这样,成功了,
(dir -dir).name | %{ &'C:\Program Files\7-Zip\7z.exe' a "$_.7z" ".\$_\*" -p123 -v1023m }

但是这是实现,将文件夹分别打包,
我需要将当前文件夹中的所有子文件夹中的文件夹合并起来打包:
代码类似这样, 如果当前文件夹中有A和B两个子文件夹,all是合并打包的文件名,代码将是:
C:\Program Files\7-Zip\7z.exe' a "all.7z" ".\A\*" ".\B\*" -p123 -v1023m

TOP

本帖最后由 5i365 于 2022-1-7 08:21 编辑

回复 39# idwma


    dir | ?{ $_.PSIsContainer } 这段能换成 (dir -dir).name 吗? 试了一下, 两个代码回显的结果不一样,
就像上面这样, 有时感觉PS的代码真是比CMD好理解, 而且还短小

TOP

返回列表