[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
改成下面这样也不行:
cmd /c ""C:\Program Files\7-Zip\7z.exe" a "0号.7z" "0号\*" -p123 -v1023m & if "dir /-c "0号.7z.001"" lss 200 (del "0号.7z.001") else if "0号.7z.001" lss 1073741824 (ren "0号.7z.001" "0号.7z")"

TOP

回复 27# idwma


    不想打包所有文件夹下的子文件夹了, 只打包 0号 文件夹

TOP

回复 29# idwma


我尝试加上, 但是始终搞不定,

刚刚看了下面的文章,
https://www.jb51.net/article/49199.htm

找到了通过一行代码获取文件大小

for /f %%i in ('dir /b "0号.7z.001"') do echo %%~zi

TOP

回复 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"))"

TOP

回复  5i365
idwma 发表于 2022-1-2 20:28



    怎样修改这个代码,最小的修改变动, 实现只压缩某一个文件夹内的子文件夹, 而不是所有的文件夹? 感觉我前面的修改变动太大了

TOP

回复  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))"

TOP

本帖最后由 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!)

TOP

回复 35# qixiaobin0715


    感谢,这样还真行了,有powershell的解法吗?

TOP

回复 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
请按任意键继续. . .

TOP

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

回复 39# idwma


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

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

回复 43# idwma


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

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

本帖最后由 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

回复 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

返回列表