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

5
我编写了一个批处理文件(使用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

环境变量 hr 根本没有被使用。虽然批处理文件可以工作,但你应该将 *.* 修改为 *,将 %%~NXA.zip 修改为 %%~nxA.zip 以使其更美观。那么你的问题是什么,或者你在寻求什么帮助? - Mofi
是的,我想在我创建的新文件夹中首先创建一个日期,所以它被留在这里,我会删除它。 我想将文件压缩到同一个文件夹中,而不创建新文件夹,并从该目录中删除旧文件。 - Sophie Kobzantsev
1个回答

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

此外,还可以查看微软文章“使用命令重定向运算符”,以了解>nul的解释。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接