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

Sop*_*sev 5 windows 7zip batch-file 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
Run Code Online (Sandbox Code Playgroud)

Mof*_*ofi 2

让我们假设该文件夹E:\Logs\SmartLogger包含以下文件:

  • 7za920.zip
  • 7-zip.chm
  • 许可证.txt
  • 自述文件.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"
)
Run Code Online (Sandbox Code Playgroud)

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"
)
Run Code Online (Sandbox Code Playgroud)

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 文章,了解 的说明>nul