使用7-Zip在同一文件上压缩和删除

时间:2016-08-21 08:02:42

标签: windows batch-file 7zip zipfile

我写了一个批处理文件(使用7-Zip),它将文件放在一个文件夹上,并将每个文件分别压缩到批处理文件中创建的另一个文件夹,然后从原始文件夹中删除文件。

我已经尝试编写它,因此它将压缩到同一个文件夹中,但它会删除所有内容,因为我的上一个命令声明要从同一文件夹中删除文件。

原始文件夹名为SmartLogger,新文件夹仅为SmartLoggerZipped

我需要压缩SmartLogger上的文件并将它们保留在同一文件夹中,然后删除文件夹中的原始文件。

@echo off
SET hr=%time:~0,2%
IF %hr% lss 10 SET hr=0%hr:~1,1%
SET SrcDir=E:\Logs\SmartLogger
SET DestDir=E:\Logs\SmartLoggerZipped
IF NOT EXIST "%DestDir%" MD "%DestDir%"
ECHO.
ECHO Compressing files and folders in E:\Logs\SmartLogger
ECHO drive and moving to E:\Logs\SmartLoggerZipped and
ECHO then delete from E:\Logs\SmartLogger
ECHO.
FOR %%A IN ("%SrcDir%\*.*") DO 7za a -tzip "%DestDir%\%%~NXA.zip" "%%~A" -mx5 && DEL /Q /F "%%~A"
ECHO.
PAUSE

1 个答案:

答案 0 :(得分:2)

我们假设文件夹E:\Logs\SmartLogger包含文件:

  • 7za920.zip
  • 7- zip.chm
  • LICENSE.TXT
  • README.TXT

目标是将此文件夹中的每个文件压缩为具有相同文件名的ZIP文件,忽略该文件夹中所有已存在的*.zip文件,以便每天运行此批处理文件。

@echo off
for %%A in ("E:\Logs\SmartLogger\*") do (
    if /I not "%%~xA" == ".zip" 7za.exe a -tzip -mx5 -y -- "%%~dpnA.zip" "%%~A" >nul && del /Q /F "%%~A"
)

执行上述批处理文件后,文件夹E:\Logs\SmartLogger包含:

  • 7za920.zip ... 未触及
  • 7-zip.zip ... 包含7-zip.chm
  • license.zip ... 包含license.txt
  • readme.zip ... 包含readme.txt

或者目标是将此文件夹中的每个文件压缩为具有相同文件名和文件扩展名的ZIP文件,忽略该文件夹中所有已存在的*.zip文件,以便能够每天运行此批处理文件一次将文件扩展名.zip附加到每个压缩文件。

@echo off
for %%A in ("E:\Logs\SmartLogger\*") do (
    if /I not "%%~xA" == ".zip" 7za.exe a -tzip -mx5 -y -- "%%~A.zip" "%%~A" >nul && del /Q /F "%%~A"
)

执行上述批处理文件后,文件夹E:\Logs\SmartLogger包含:

  • 7za920.zip ... 未触及
  • 7-zip.chm.zip ... 包含7-zip.chm
  • license.txt.zip ... 包含license.txt
  • readme.txt.zip ... 包含readme.txt

两个批处理文件之间的差异为"%%~dpnA.zip""%%~A.zip"

要了解使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并完全阅读为每个命令显示的所有帮助页面。

  • echo /?
  • if /?
  • for /?
  • 7za --help

另请参阅Microsoft文章Using command redirection operators以获取>nul的解释。