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

本帖最后由 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!
复制代码

TOP

回复 35# qixiaobin0715


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

TOP

虽然可以,代码难读,不建议这样写。

TOP

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

回复 41# 5i365


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

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

返回列表