使用7-Zip压缩目录中的文件夹,然后删除用于创建.zip文件的源文件夹

时间:2014-03-21 08:56:39

标签: batch-file compression backup scheduled-tasks 7zip

我需要运行一个脚本来压缩目录结构中2级文件夹中的所有文件夹。我希望脚本压缩日志文件夹中的所有文件夹,然后删除原始文件夹,从而节省空间负载。要说明我想压缩的文件夹,请参阅以下内容:

云端硬盘位置 - >机器名称 - >日志类型 - > folders_i_want_to_compress

在文件夹2中,有一些日期格式为yyyymmdd的文件夹,我希望将其压缩为zip文件。

我无法弄清楚如何创建脚本来执行此操作,但我确实在此处找到了类似的脚本:7-Zip compress files within a folder then delete files

......看起来像这样:

REM Usage: ZipFilesRecursively.bat "C:\My Files"
for /R "%~f1" %%F in (*) do (
    7z a -mx9 "%%~dpnxF.7z" "%%F"
    if exist "%%~dpnxF.7z" del "%%F"
)

但这只适用于文件。我无法工作如何更改它,以便它适用于文件夹而不是文件,虽然我相信它的开头将用于/ D开关而不是/ R.

由于文件夹的路径部分基于机器名称,我需要将其提供给脚本,因此我计划使用另一个批处理文件中的调用来运行压缩/删除脚本。

调用脚本看起来像这样

Call zipdeletetest4 machinename1
Call zipdeletetest4 machinename2    
Call zipdeletetest4 machinename3
Call zipdeletetest4 machinename4

任何人都可以帮忙吗?

4 个答案:

答案 0 :(得分:2)

假设您正在使用7zip命令行,您应该能够使用以下脚本:

@ECHO OFF
for /d %%a in (*) do (7za a -tzip %%~na.zip "%%a")
for /d %%a in (*) do (if exist "%%a\" del "%%a")
pause

要使用它,请在' logtype'中重击批处理文件。你提到的文件夹,并运行它。

答案 1 :(得分:0)

命令集是正确执行此类任务的正确方法。

command && command_OK || command_Fail
仅当command_OK成功完成时才会执行

command,并在出现错误时执行command_Fail。这种模式的典型用法:

call %archiver% %file% && (del %file%) || (exit /b 1)

但在这种情况下,您不需要任何其他命令。幸运的是,7zip具有很棒的-sdel选项,可以解决问题。

答案 2 :(得分:-1)

我最终选择了

REM compress folders to zips
for /d %%x in ("C:\Logs\*.*") do start "C:\Program Files (x86)\7-Zip\7z.exe" /b /low /wait "C:\Program Files (x86)\7-Zip\7z.exe" a -tzip "%%x.zip" "%%x\"

REM delete the original folders used to create zips
for /d %%F in ("C:\Logs\*") do rd /s /q "%%F"

答案 3 :(得分:-1)

这是我用于文件夹的内容。

@echo off for / D %% d in(*)do( 7z a t -mx9 -t7z -y“%% ~nd.7z”“%% ~fd” 如果存在“%% ~nd.7z”rmdir / s / q“%% ~fd” 其他 echo文件“%% ~fd”不存在 暂停 )