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

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

[复制链接]
 楼主| 发表于 2022-1-5 16:50:50 | 显示全部楼层
回复 29# idwma


    现在搞定了, 但是有点乱,怎样把我要压缩的文件夹名, 定义一个变量, 这样就可以在最开头定义要压缩的文件夹名字了, cmd命令, 并成一行真是太复杂了, powershell 只需要; 就行了

cmd /c ""C:\Program Files\7-Zip\7z.exe" a "0号.7z" ".\0号\*" -p123 -v1023m & for /f %%i in ('dir /b "0号.7z.001"') do (if %%~zi lss 20 (del "0号.7z.001") else if "0号.7z.001" lss 1073741824 (ren "0号.7z.001" "0号.7z"))"
 楼主| 发表于 2022-1-5 17:12:23 | 显示全部楼层
回复  5i365
idwma 发表于 2022-1-2 20:28



    怎样修改这个代码,最小的修改变动, 实现只压缩某一个文件夹内的子文件夹, 而不是所有的文件夹? 感觉我前面的修改变动太大了
 楼主| 发表于 2022-1-6 19:45:44 | 显示全部楼层
回复  5i365


    1.%a%改成!a!,&之间可能还要用()括起来
2.
idwma 发表于 2021-12-31 17:20



    这里的问题1, 我试了几天了, 还没有成功,试了下面的两种, 请问能否使用powershell实现相同的效果?感谢!
@echo off&setlocal enabledelayedexpansion&for /f "delims=" %%i in ('dir /b /ad') do ((set "a=!a! ".\%%i\*"")&("C:\Program Files\7-Zip\7z.exe" a ab.7z !a! -p123 -v1023m))
cmd /c "setlocal enabledelayedexpansion&for /f "delims=" %%i in ('dir /b /ad') do ((set "a=!a! ".\%%i\*"")&("C:\Program Files\7-Zip\7z.exe" a ab.7z !a! -p123 -v1023m))"
 楼主| 发表于 2022-1-6 20:12:12 | 显示全部楼层
本帖最后由 5i365 于 2022-1-6 20:32 编辑
回复  5i365


    1.%a%改成!a!,&之间可能还要用()括起来
2.
idwma 发表于 2021-12-31 17:20


用下面这两行还能正确回显:
@echo off&setlocal enabledelayedexpansion&for /f "delims=" %%i in ('dir /b /ad') do set "a=!a! ".\%%i\*""
echo %a%
但是并成一行,就不行了:
@echo off&setlocal enabledelayedexpansion&for /f "delims=" %%i in ('dir /b /ad') do set "a=!a! ".\%%i\*"" &echo %a%
这样可以显示结果, 但是结果是双行的
@echo off&setlocal enabledelayedexpansion&for /f "delims=" %%i in ('dir /b /ad') do (set "a=!a! ".\%%i\*"" &echo !a!)
发表于 2022-1-6 20:45:57 | 显示全部楼层
本帖最后由 qixiaobin0715 于 2022-1-6 20:49 编辑

这样呢:
  1. @echo off&setlocal enabledelayedexpansion&(for /f "delims=" %%i in ('dir /b /ad') do set "a=!a! ".\%%i\*"" )&echo !a!
复制代码
 楼主| 发表于 2022-1-6 20:49:21 | 显示全部楼层
回复 35# qixiaobin0715


    感谢,这样还真行了,有powershell的解法吗?
发表于 2022-1-6 20:51:33 | 显示全部楼层
虽然可以,代码难读,不建议这样写。
发表于 2022-1-6 20:53:00 | 显示全部楼层
powershell菜鸟,学习中!!!
 楼主| 发表于 2022-1-6 22:53:32 | 显示全部楼层
回复 39# idwma


   
C:\Users\Administrator\Desktop\Test3>powershell "dir|?{$_.PSIsContainer}|\Program Files\7-Zip\7z.exe' a $_'.7z' ".\$_\*"
-p123 -v1023m}"
The string is missing the terminator: '.
    + CategoryInfo          : ParserError: ( [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : TerminatorExpectedAtEndOfString


C:\Users\Administrator\Desktop\Test3>pause
请按任意键继续. . .
 楼主| 发表于 2022-1-7 08:20:17 | 显示全部楼层
本帖最后由 5i365 于 2022-1-7 08:21 编辑

回复 39# idwma


    dir | ?{ $_.PSIsContainer } 这段能换成 (dir -dir).name 吗? 试了一下, 两个代码回显的结果不一样,
就像上面这样, 有时感觉PS的代码真是比CMD好理解, 而且还短小
 楼主| 发表于 2022-1-7 08:26:36 | 显示全部楼层
本帖最后由 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
发表于 2022-1-7 17:46:37 | 显示全部楼层
回复 41# 5i365


    放到bat出错%改成foreach就好了
显示不一样,结果是一样的,win7自带的没有这个参数
  1. (dir -dir).name | %{ $a+=' "{0}" ' -f ".\$_\*" }
  2. $a
复制代码
 楼主| 发表于 2022-1-7 19:16:35 | 显示全部楼层
回复 43# idwma


    这个代码不错,怎样在上面的批处理下使用呢?
另外%和foreach我在win7好像都可以运行
 楼主| 发表于 2022-1-8 10:09:08 | 显示全部楼层
本帖最后由 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}"
 楼主| 发表于 2022-1-8 11:25:35 | 显示全部楼层
本帖最后由 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
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 07:11 , Processed in 0.020368 second(s), 7 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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