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

powershell菜鸟,学习中!!!

TOP

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

TOP

回复 35# qixiaobin0715


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

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

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

回复  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
idwma 发表于 2022-1-2 20:28



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

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

回复 29# idwma


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

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

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

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

TOP

回复 28# 5i365


    里面那层截取大小的for还是要留的

TOP

回复 27# idwma


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

TOP

回复 26# 5i365


    为什么要去掉for?

TOP

改成下面这样也不行:
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

回复 20# idwma


   我把上面的改成下面 只处理批处理所在的 0号文件夹,里面文件打包后205M, 但是 把  lss 200 即使改为20 还是会被删除, 没有任何压缩包留下, 哪里出了问题?

cmd /c ""C:\Program Files\7-Zip\7z.exe" a "0号.7z" "0号\*" -p123 -v1023m & if "0号.7z.001" lss 200 (del "0号.7z.001") else if "0号.7z.001" lss 1073741824 (ren "0号.7z.001" "0号.7z")"

TOP

返回列表