2014-01-17 4 views
4

Пожалуйста, смотрите обновленный ответ нижеПакетный файл - Нужна альтернатива 7-Zip - не может двигаться

Пакетные файлы Windows.

Я очень люблю 7-Zip и отлично работает, но, как и способность WinZip перемещать файлы и файлы timestamp. Однако WinZip (интерфейс командной строки) имеет ограничения для размера файлов и количества файлов в архиве, например.

Googling Мы видим, что есть человек, который сделал код 7-zip и повторно скомпилировал код для использования переключателя -m (move). Тем не менее, я не чувствую себя комфортно в отношении использования сторонних разработчиков Developer of 7-zip в нашей производственной среде.

Кроме того, я видел - http://alternativeto.net/software/7-zip/

Я закодирован: IF NOT Равен 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% 

Я предполагаю, что с точки зрения программного обеспечения я хотел бы иметь некоторые возможности WinZip в 7Zip. Мне нравится 7Zip, поскольку он имеет возможность работать с большими Архивами. Мне нравится PeaZip, и я использовал PowerArchiver много лун назад. Проблема заключается в том, что я работаю с Apache Tomcat для Windows, и нам приходится архивировать почасовые журналы, которые могут составлять более 200-300 МБ в час, и необходимо, чтобы серверы не очищались от старых журналов.

Надеюсь, что это имеет смысл.

UPDATE:

Верит, что я ответил на мой собственный вопрос ..

FOR /F %%F IN ('dir /B "D:\serverlogs\server.log.2014-01-19*"') DO (
D:\work\scripts\7za.exe –tzip –y a "D:\ziplogs\[email protected]" >> D:\WORK\SCRIPTS\LOGS\LOG_20140120.LOG && DEL "D:\serverlogs\%%F" 
) 

Что это хорошо работать в настоящее время.

+0

Можете ли вы подробно остановиться на «если существует несколько одинаковых структур имен файлов»? Некоторые примеры были бы полезны здесь. – Mark

+0

Чтобы лучше предложить альтернативы, пожалуйста, перечислите все функции, которые вам нужны в программном обеспечении архива/сжатия файлов. –

+0

Надеюсь, что код и требования, которые он предлагает, имеют больший цвет проблемы. – Leptonator

ответ

6

Последние альфа-версии 7-Zip поддерживают новый переключатель «-sdel» для удаления файлов после включения в архив.

+0

Здорово получить ответ от человека, написавшего 7-Zip. Большое спасибо. – Leptonator

+0

ОК .. Я трался на вашем сайте, и я вижу, что 9.30 имеет ключ -sdel, а затем он был удален в 9.32? – Leptonator

+0

-sdel-переключатель поддерживается во всех новых версиях: 9.30, 9.31, 9.32. –

0

На 7z Обсуждение там вы можете нашли сумасшедший пакетный способ замены отсутствующих удалить после того, как архив переключателе Энди здесь: 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.

+0

Я думаю, вам нужно работать над вашим материалом ERRORLEVEL. Поведение, представленное, заставляет меня подвергнуть сомнению надежность этого скрипта. Начните здесь - http: // stackoverflow. ком/вопросы/4367930/Равен-внутри-если? RQ = 1 – Leptonator