使用 7-Zip 压缩和删除同一文件
Posted
技术标签:
【中文标题】使用 7-Zip 压缩和删除同一文件【英文标题】:Zip and delete on the same file using 7-Zip 【发布时间】:2016-08-21 08:02:42 【问题描述】:我已经编写了一个批处理文件(使用 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
以更美观。那么您的问题分别是什么?
是的,我想先在我正在创建的新文件夹上创建一个日期,所以它留在这里,我会删除它。我想压缩到同一个文件夹而不创建新文件夹,并从该目录中删除旧文件。
【参考方案1】:
让我们假设文件夹E:\Logs\SmartLogger
包含文件:
目标是将此文件夹中的每个文件压缩成具有相同文件名的 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
包含:
或者目标是将此文件夹中的每个文件压缩为具有相同文件名和文件扩展名的 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
包含:
两个批处理文件的区别是"%%~dpnA.zip"
与"%%~A.zip"
。
要了解所使用的命令及其工作原理,请打开命令提示符窗口,在其中执行以下命令,并仔细阅读每个命令显示的所有帮助页面。
echo /?
if /?
for /?
7za --help
另请参阅有关Using command redirection operators 的Microsoft 文章以了解>nul
的解释。
【讨论】:
以上是关于使用 7-Zip 压缩和删除同一文件的主要内容,如果未能解决你的问题,请参考以下文章