首页 > 编程问答 >压缩文件时的奇怪行为

压缩文件时的奇怪行为

时间:2024-06-24 18:26:48浏览次数:24  
标签:windows file batch-file compression 7zip

非常奇怪,我有一个 Python 脚本和一个 bat 文件,它可以在 Windows 7 机器上通过遍历文件并逐个压缩来压缩文件。

但奇怪的是,它总是停在 248 个文件处,尽管该目录中有 700 多个文件(我只是压缩了整个文档文件夹)。当我使用 Winrar 而不是 7zip 时,也出现了同样的情况,我不明白。

它还压缩了 "我的音乐"、"我的图片"等,而这些文件夹并不在文档目录中,但不管怎样。

谁能帮帮我?

@echo off
设置本地

set "input_directory=C:\Users\Administrator\Documents";
set "output_directory=C:\Users\Administrator\Documents\lzma1.0";

if not exist "%output_directory%" mkdir "%output_directory%";

for %%F in ("%input_directory%\*") do (
    set "input_file=%%F";
    set "output_file=%%~nF.7z";
    调用 :compress_file
)

转到 :eof

:compress_file
"C:\Program Files\7-Zip\7z.exe" a -t7z -mx=5 -m0=lzma -md=16M "%output_directory%\%output_file%" "%input_file%";
转到 :eof


这个脚本在压缩 248 个文件后停止工作,原因很可能与 Windows 命令提示符中 FOR 命令的限制有关。默认情况下,FOR 命令处理的文件名数量有限制,而的“文档”文件夹中可能包含超过此限制的文件。

以下是两种可能的解决方案:

方法 1:使用 ROBOCOPY 和 FOR /F 结合

这种方法使用 ROBOCOPY 获取文件名列表,并使用 FOR /F 循环处理列表。

@echo off
setlocal

set "input_directory=C:\Users\Administrator\Documents"
set "output_directory=C:\Users\Administrator\Documents\lzma1.0"

if not exist "%output_directory%" mkdir "%output_directory%"

for /f "delims=" %%F in ('robocopy "%input_directory%" "%input_directory%" /s /l /njh /njs ^| findstr /i "\. "') do (
    set "input_file=%%F"
    set "output_file=%output_directory%\%%~nF.7z"
    "C:\Program Files\7-Zip\7z.exe" a -t7z -mx=5 -m0=lzma -md=16M "%output_file%" "%%F"
)

endlocal

方法 2: 使用 PowerShell 脚本

PowerShell 脚本不受此限制的影响,可以轻松处理大量文件。

$input_directory = "C:\Users\Administrator\Documents"
$output_directory = "C:\Users\Administrator\Documents\lzma1.0"

if (!(Test-Path -Path $output_directory)) {
    New-Item -ItemType Directory -Path $output_directory
}

Get-ChildItem -Path $input_directory -File | ForEach-Object {
    $input_file = $_.FullName
    $output_file = Join-Path -Path $output_directory -ChildPath "$($_.BaseName).7z"
    & "C:\Program Files\7-Zip\7z.exe" a -t7z -mx=5 -m0=lzma -md=16M $output_file $input_file
}

关于压缩其他文件夹的问题:

的脚本目前压缩“我的音乐”和“我的图片”文件夹,是因为使用了 * 通配符,它会匹配所有文件和文件夹。

要仅压缩“文档”文件夹中的文件,请将 robocopy 命令修改为:

robocopy "%input_directory%" "%input_directory%" /s /l /njh /njs /xf "*\*"

这将排除所有文件夹,只列出文件。

建议:

  • 在运行脚本之前,请务必备份重要数据。
  • 根据的需求调整压缩设置。

希望以上信息对有所帮助!

标签:windows,file,batch-file,compression,7zip
From: 78661846

相关文章

  • 【Python3.8.10打包exe】【Windows】
    Python3.8.10打包exe打包命令pyinstaller-Fxxx.py查看Package及版本号piplist查看Python版本号python-V打包需要用的Package及版本#python版本#3.8.10#wheel版本#0.43.0#pyinstaller版本#6.8.0常用链接chatgptPython标准库—Python3.8.19文档PyPI......
  • 将Windows11右键菜单修改为Windows10风格
    Windows11更新后,右键菜单很多功能隐藏起来了,使用时需要点击“显示更多选型”才能获取完整功能。为了能获得Windows10右键菜单丝滑的体验,我总结了以下方法。方法一:控制台操作法按住win+R打开运行窗口输入cmd,打开控制台在控制泰中输入下方代码,回车,显示操作成功开启旧版右......
  • XAMPP Windows PHP-CGI 代码执行漏洞(CVE-2024-4577) | Goby漏洞预警
    漏洞描述:PHP是一种在服务器端执行的脚本语言,在PHP的8.3.8版本之前存在命令执行漏洞,由于Windows的“Best-FitMapping”特性,在处理查询字符串时,非ASCII字符可能被错误地映射为破折号(-),导致命令行参数解析错误,当php_cgi运行在Windows平台上,且代码页为繁体中文、简......
  • Ollama在windows下三个重要环境参数的配置, 解决浏览器跨域访问、端口配置和C盘占用过
    在windows中增加环境变量可以使用以下方法:使用Windows+R快捷键打开「运行」对话框,输入命令:sysdm.cpl系统属性->环境变量->用户变量,新增变量记录。#跨域访问#因浏览器安全限制,要在ollama-webui-lite等UI面板中调用API,需要为Ollama进行跨域配置后方可正常使用,可以添加......
  • java的输入流FileInput Stream类
    一、定义使用InputStream类的FileInputStream子类实现文本文件内容的读取。二、常用构造方法三、使用FileInputStream类按多字节读取数据1.示例 2、分析四、常见错误  今天的总结就到这里啦,拜拜!  ......
  • 高级DISM命令,你可以进行全面且深入的Windows映像维护和修复,确保系统的稳定性和性能;DIS
    修复Windows映像通常涉及使用DISM(DeploymentImageServicingandManagement)命令。以下是一个初级的大纲,帮助你理解如何使用DISM命令进行映像修复:1.检查映像健康状态使用DISM命令可以检查和修复损坏的Windows映像文件。以下是一些常用的DISM命令:检查映像健......
  • A Completed Python Scripter and File Handle with Matplotlib
    importosimportrequestsimportrequestsfrombs4importBeautifulSoupfromtypingimportDicttotal_div:Dict[str,BeautifulSoup]=dict()defthe_big_div(text:str):soup=BeautifulSoup(text,'lxml')count=soup.find_all('div......
  • java的输出流File OutputStream
    一、字节输出流FileOutputStream 1、定义使用OutputStream类的FileOutputStream子类向文本文件写入的数据。2.常用构造方法3.创建文件输出流对象的常用方式 二、输出流FileOutputStream类的应用示例1.示例  2、实现步骤  今天的总结就到此结束啦,拜拜! ......
  • 域渗透学习(一)Windows认证机制
    windows认证机制何谓域渗透,域渗透就是基于windows域环境的渗透,而域渗透涉及到的技术,如哈希传递(PTH)票抵传递(PTT)委派攻击等,都是基于域环境下的认证机制来实现的,这也是为什么要了解windows认证机制的原因之一。windows的认证包括三个部分,用户直接操作计算机登录账号(本地认证),远程连......
  • 在Windows环境中,如果你希望禁用通过Win+R快捷键运行命令提示符(cmd),可以采取以下方法。
    在Windows环境中,如果你希望禁用通过Win+R快捷键运行命令提示符(cmd),可以采取以下方法。这些方法包括组策略编辑器和注册表编辑器,但请注意,修改系统设置可能会影响系统的其他功能,应谨慎操作。方法1:使用组策略编辑器打开组策略编辑器:按 Win+R,输入 gpedit.msc,然后按回车。......