我需要运行一个脚本来压缩目录结构中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
任何人都可以帮忙吗?
答案 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”不存在 暂停 )