我有一个批处理文件,用于对具有特定设置的 7zip 文件进行压缩,如果 PC 内存不足或由于某种原因出现故障,它会自动减少设置。我将一个文件夹拖到批处理文件上,它将在被 7zipped 的文件夹的根目录中创建一个存档。
eg:要压缩的文件夹
Z:\Test\Example Folder
。如果我使用这段代码:
for %%x in (%*) do (
Rem // Use Current Argument To set File, Folder, and Archive Paths
Set filePath="%%~x"
Set directoryFiles="%%~x\*"
Set archivePath="%%~x.7z"
我最终在被压缩文件夹的根目录中得到了一个 7zip 文件,例如
Z:\Test\Example Folder.7z
如果我使用此代码:
for %%x in (%*) do (
Rem // Use Current Argument To set File, Folder, and Archive Paths
Set filePath="%%~x"
Set directoryFiles="%%~x\*"
Set archivePath="C:\Users\Dr4gon\Downloads\Compressed\NEW.7z"
我最终得到一个 7zip 文件,
C:\Users\Dr4gon\Downloads\Compressed\NEW.7z
我试过修改
C:\Users\Dr4gon\Downloads\Compressed\%%~x.7z
,但还是失败了。我想是因为%%~x
实际上意味着Z:\Test\Example Folder
而不仅仅是Example Folder
我需要使用什么代码来完成 7zip 文件:
C:\Users\Dr4gon\Downloads\Compressed\Example Folder.7z
代码发生这种变化的主要原因,是因为有时我需要在网络上压缩7zip文件夹,速度太慢,有时会失败,同时写入网络驱动器。我希望能够设置默认文件夹并在跨不同驱动器使用 7zip 时获得速度优势。
具体要求的代码是
%%~nx
。这会获取文件夹名称并允许使用它来移动默认存档位置。
例如压缩
Z:\Test\Example Folder
,将文件存放在C:\Users\Dr4gon\Downloads\Compressed
Set archivePath="C:\Users\Dr4gon\Downloads\Compressed\%%~nx.7z"
如果是插入原代码:
for %%x in (%*) do (
Rem // Use Current Argument To Set File, Folder, and Archive Paths
Set filePath="%%~x"
Set directoryFiles="%%~x\*"
Set archivePath="C:\Users\Dr4gon\Downloads\Compressed\%%~nx.7z"
文件正确放置在原文件夹名的压缩文件夹中:
C:\Users\Dr4gon\Downloads\Compressed\Example Folder.7z
与其使用
for
不如使用:LoopStart
更好,在这种情况下定义7z文件名的方法将是%~n1
.
例如:
@echo off
setlocal EnableExtensions EnableDelayedExpansion
set "archivePath=C:\Users\Dr4gon\Downloads\Compressed\%~n1.7z"
set /a count=0
:LoopStart
set /a count+=1
if %count% gtr 4 goto EndLoop
if %count%==1 (
set successThread=3
set successDictionary=2048m
) else if %count%==2 (
set successThread=5
set successDictionary=1024m
) else if %count%==3 (
set successThread=8
set successDictionary=256m
) else if %count%==4 (
set successThread=6
set successDictionary=96m
)
"C:\Program Files\7-Zip\7z.exe" a -aoa -t7z -mx9 -m0=LZMA2 -md=!successDictionary! -mfb273 -mmt=!successThread! -v1073741824 "!archivePath!" "%~1\*"
pause
exit
这将使您能够将输出 7z 文件的位置设置为您选择的位置。如果您想做出选择,请添加以下内容:
:input
cls
set "response="
choice /M "Should the 7z file be placed into the current directory?" /C YN
if errorlevel 2 goto No
if errorlevel 1 goto Yes
:Yes
set "archivePath=%~n1.7z"
goto :Loop
:No
set "archivePath=C:\Users\D4rgon\Downloads\Compressed\%~n1.7z"
goto :Loop
:Loop
这可以让您根据情况进行选择。但是警告,这不会压缩单个文件,只会压缩文件夹,在有限的测试中,一些特殊字符可以工作,但其他字符可能会导致问题;例如,文件夹名称中的
!
,将导致失败。