批处理文件 - 需要替代 7-zip - 无法移动
Posted
技术标签:
【中文标题】批处理文件 - 需要替代 7-zip - 无法移动【英文标题】:Batch file - Need an Alternative to 7-zip - cannot move 【发布时间】:2014-01-17 17:28:40 【问题描述】:请查看下面的更新答案
Windows 批处理文件。
我非常喜欢 7-Zip 并且效果很好,但喜欢 WinZip 的移动和时间戳文件的能力。但是,例如,WinZip(命令行界面)对文件大小和存档中的文件数量有限制。
谷歌搜索我们确实看到有一个人确实获取了 7-zip 的代码并重新编译了代码以使用 -m(移动)开关。但是,我对在我们的生产环境中使用 7-zip 开发人员之外的第三方感到不舒服。
另外,我见过 - http://alternativeto.net/software/7-zip/
我已经编码: IF NOT ERRORLEVEL 1(在 Zip 处理之后)删除文件,但是如果有多个相同的文件名结构,这不安全。
以下是一些示例代码: 7zip:
D:\scripts\7za -tzip -y a D\zips\20140116_someclient_%computername%@%location%.zip D:\logs\apache_log.2014-01-16* >nul >>%logfile%
IF NOT ERRORLEVEL 1 ECHO Y|DEL D:\logs\apache_log.2014-01-16*
apache_log.2014-01-16 在哪里 可能是:
apache_log.2014-01-16.1
apache_log.2014-01-16.2
apache_log.2014-01-16.3
等等
WinZip
c:\progra~1\WinZip\Wzzip.exe -T -ex -m D\zips\20140116_someclient_%computername%@%location%.zip D:\logs\some_file.2014-01-16* >nul >>%logfile%
我想从软件需求的角度来看,我想在 7Zip 中拥有一些 WinZip 的功能。我喜欢 7Zip,因为它能够处理大型档案。我喜欢 PeaZip,我在很多个月前使用过 PowerArchiver。我遇到的问题是我正在使用适用于 Windows 的 Apache Tomcat,我们必须归档每小时超过 200-300 MB 的日志,并且需要让服务器清除旧日志。
希望这更有意义。
更新:
相信我已经回答了我自己的问题..
FOR /F %%F IN ('dir /B "D:\serverlogs\server.log.2014-01-19*"') DO (
D:\work\scripts\7za.exe –tzip –y a "D:\ziplogs\201401109_COMPANY_SERVERNAME@DATACENTER.ZIP" >> D:\WORK\SCRIPTS\LOGS\LOG_20140120.LOG && DEL "D:\serverlogs\%%F"
)
现在效果很好。
【问题讨论】:
能否详细说明“如果有多个相同的文件名结构”?一些例子在这里会很有用。 为了最好地建议替代方案,请列出您在文件存档/压缩软件中需要的所有功能。 希望代码和要求能为问题提供更多色彩。 确实回答了我的问题。在 FOR 循环中添加了一个删除文件的组件 - 现在可以正常工作了。 【参考方案1】:7-Zip 的最新 alpha 版本支持新开关“-sdel”以在包含存档后删除文件。
【讨论】:
很高兴在这里得到编写 7-Zip 的人的答复。非常感谢。 OK.. 我在您的网站上四处搜寻,发现 9.30 有 -sdel 键,然后在 9.32 中将其删除? -sdel 开关在所有新版本中都受支持:9.30、9.31、9.32。 7z -sdel a a.zip a.txt 可以用Alpha版不用担心数据丢失吗?什么时候会有包含 -sdel 的稳定版本?【参考方案2】:在 7z 讨论中,您可以在这里找到一种疯狂的批量方法来替代 Andy 在存档切换后丢失的删除:http://sourceforge.net/p/sevenzip/discussion/45797/thread/5bf7022b/
@ECHO off
echo ################################################
echo Zipping up Backups with 7-Zip
cd e:\gh\backups
7z.exe a %DATE:~-4%-%DATE:~4,2%-%DATE:~7,2%_DB1-Prod.7z
IF "%errorlevel%"=="0" (goto testzips) ELSE (goto zipfail)
:testzips
echo ################################################
echo Testing Integrity of Zipfile
FOR %%i IN (*.7z) DO 7z.exe t %%i
IF "%errorlevel%"=="0" (goto extract) ELSE (goto testzipfail)
:extract
echo ################################################
Echo Extracting files to temp folder
FOR %%i IN (*.7z) DO 7z.exe e %%i -oe:\gh\temp
IF "%errorlevel%"=="0" (goto movezip) ELSE (goto errorextract)
:movezip
echo ################################################
echo Moving Zipped File to Archive Folder
move e:\gh\Backups\*.7z e:\gh\Archives
IF "%errorlevel%"=="0" (goto testfiles) ELSE (goto archivemovefail)
:testfiles
echo ################################################
fc /b e:\gh\backups\*.4BS e:\gh\temp\*.4BS
IF ERRORLEVEL 0 (goto testfile4BL) else (goto comparealert)
:testfile4BL
fc /b e:\gh\backups\*.4BL e:\gh\temp\*.4BL
IF ERRORLEVEL 0 (goto testfile4BK) else (goto comparealert)
:testfile4BK
fc /b e:\gh\backups\*.4BK e:\gh\temp\*.4BK
IF ERRORLEVEL 0 (goto testfile4BR) else (goto comparealert)
:testfile4BR
fc /b e:\gh\backups\*.4BR e:\gh\temp\*.4BR
IF ERRORLEVEL 0 (goto copytonas) else (goto comparealert)
:: IF ERRORLEVEL 1 (goto copytonas) ELSE (goto comparealert)
:copytonas
echo ################################################
echo Copying archive to Fileserver
robocopy e:\gh\Archives \\fileserver\backups /NP /MAXAGE:1
REM IF "%errorlevel%"=="1" (goto cleanup) ELSE (goto nascopyalert)
if errorlevel 16 echo ***FATAL ERROR*** & goto nascopyalert
if errorlevel 15 echo OKCOPY + FAIL + MISMATCHES + XTRA & goto nascopyalert
if errorlevel 14 echo FAIL + MISMATCHES + XTRA & goto nascopyalert
if errorlevel 13 echo OKCOPY + FAIL + MISMATCHES & goto nascopyalert
if errorlevel 12 echo FAIL + MISMATCHES& goto nascopyalert
if errorlevel 11 echo OKCOPY + FAIL + XTRA & goto nascopyalert
if errorlevel 10 echo FAIL + XTRA & goto nascopyalert
if errorlevel 9 echo OKCOPY + FAIL & goto nascopyalert
if errorlevel 8 echo FAIL & goto nascopyalert
if errorlevel 7 echo OKCOPY + MISMATCHES + XTRA & goto nascopyalert
if errorlevel 6 echo MISMATCHES + XTRA & goto nascopyalert
if errorlevel 5 echo OKCOPY + MISMATCHES & goto cleanup
if errorlevel 4 echo MISMATCHES & goto nascopyalert
if errorlevel 3 echo OKCOPY + XTRA & goto cleanup
if errorlevel 2 echo XTRA & goto nascopyalert
if errorlevel 1 echo OKCOPY & goto cleanup
if errorlevel 0 echo No Change & goto nascopyalert
:cleanup
Echo Congrats - All files were backed up properly. Cleaning up
REM cd e:\gh\temp
REM del /Q *.*
cd e:\gh\temp
del /Q *.*
cd e:\gh\backups
del /Q *.*
IF "%errorlevel%"=="0" (goto EOF) ELSE (goto cleanupalert)
:zipfail
echo FAILURE
echo Backup files did not zip properly - Check Backups!!
:testzipfail
echo FAILURE
echo Backup files did not pass integrity chec - Check Backups!!
:archivemovefail
echo FAILURE
echo Backup files did not move to archive directory - Check Backups!!
:errorextract
echo FAILURE
echo Backup files did not extract to test directory properly - Check Backups!!
:comparealert
Echo FAILURE
echo Backup files did not pass comparison check in FC - Check Backups!!
:nascopyalert
echo FAILURE
echo Backup files did not copy to the NAS - Check Backups!!
:cleanupalert
echo FAILURE
echo Backup files did not clean up - Check Backups!!
:cleancomplete
:EOF
Echo Proccess Complete - Check Logs and emails.
但这实际上可以在经过一些调整后起作用。如果这些选项可以在 7zip 中,那就更好了。
【讨论】:
我认为您需要处理您的 ERRORLEVEL 内容。所呈现的行为使我质疑此脚本的可靠性。从这里开始 - ***.com/questions/4367930/errorlevel-inside-if?rq=1以上是关于批处理文件 - 需要替代 7-zip - 无法移动的主要内容,如果未能解决你的问题,请参考以下文章