非常奇怪,我有一个 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