• 0

7zip in a batch file


Question

Hi,

I have a batch file that runs each day and downloads about 20 .zip files from a network share to a server which then extracts them.. before continuing with other bits and bobs

the copying is carried out by ROBOCOPY, and the extraction done by 7zip

this was all working fine til yesterday when i realised my process was falling over every time. Turns out one of the .zip files was corrupt and when it tried to extract the batch file just bombs out

7zip has a file integrity check option but i cant for life of me figure out how to get the result of this check into something like an IF THEN ELSE execute the extract part

options i have considered:

1. only copy correct files with robocopy (cant work out how to check integrity, or even if its possible)

2. do a crc on the files - not really useful as i dont know what the results should be

3. use the 7zip t flag in some manner - 7z.exe t filename.zip and generate an ERRORLEVEL in the batch... bit lost on this one??????

5. batch file try-catch 'hack' - ok i was desperate at this point... :)

can anyone figure out a clever method of making this work? i will be eternally grateful because its starting to really **** me off... :p

perhaps i could run a check, output the successful results to a file and then only extract the filenames that are contained in that file??

thanks all

a frustrated chris :|

Link to comment
https://www.neowin.net/forum/topic/622510-7zip-in-a-batch-file/
Share on other sites

5 answers to this question

Recommended Posts

  • 0

7z t -r filename.zip

might work. If you don't specify a recurse parameter, and your archive has directories inside it, it will not generate an error if the files and directories at the top level of the archive are OK.

Other than that, I have no ideas. :p

I wonder... Could it be the extraction process that is messing things up? You might consider that option, in which case you could consider using something like PicoZip to extract the files and compare the results.

  • 0
  BGM said:
3. use the 7zip t flag in some manner - 7z.exe t filename.zip and generate an ERRORLEVEL in the batch... bit lost on this one??????

Try something like:

@echo off
REM *
REM Test zip
REM *
7za.exe t filename.zip
REM *
REM 0 = no error, else error.
REM *
IF %ERRORLEVEL% == 0 ( GOTO EXTRACT ) ELSE ( GOTO ERROR )

:EXTRACT
echo.
echo Extracting zip...
echo.
GOTO END

:ERROR
echo.
echo Error: %ERRORLEVEL%
echo.

:END

  Exit Codes from 7-Zip said:
7-Zip returns the following exit codes:

Code Meaning

0 No error

1 Warning (Non fatal error(s)). For example, one or more files were locked by some other application, so they were not compressed.

2 Fatal error

7 Command line error

8 Not enough memory for operation

255 User stopped the process

  • 0
  rpgfan said:
I wonder... Could it be the extraction process that is messing things up? You might consider that option, in which case you could consider using something like PicoZip to extract the files and compare the results.

its possible i suppose, i did manage to atleast open the file with winrar...

it still gave an error mind you, i might investigate that tomorrow...

@Wilhelmus: thanks for that! ill give it a shot tomorrow, i am assuming that thats completely untested and off the top of your head???

also, i spent a good 2 hours today searching for error codes, or infact any sort of error output for 7zip so double thanks for the heads up :)

  • 0

Ok, so with the great help from Wilhelmus I finally achieved my goal! :)

Here’s the code in case anyone is interested... It accepts a path name of where the files are located as an argument at the command line and runs through all matching files checking the integrity before attempting an unzip if they are valid..

Most importantly doesn’t bomb out if they are invalid! Woo

@echo off

REM Map source location to a drive letter
NET USE z: /delete
NET USE z: \\server\folder\sub /p:yes


REM Copy all zip files in mapped folder to temp directory 
ROBOCOPY Z:\  %1 /MIN:5


REM Change to 7zip directory
cd "c:\Program Files\7-Zip"
c:


REM Process each file in the temp directory..
for /f %%a in ('dir /b %1\b_*.zip') do call :PROCESS %1 %%a
GOTO :EOF


:PROCESS
REM Test the integrity of the file
7z t %1\%2


REM 0 = no error, else error.
IF %ERRORLEVEL% == 0 ( GOTO EXTRACT ) ELSE ( GOTO ERROR )


REM Extract the valid files into the temp directory
:EXTRACT
7z e %1\%2 -o%1 -y
GOTO END


:ERROR
echo Error: %ERRORLEVEL%


:END

Edited by BGM
  • 0

Hi,

I am trying to do similar thing as you did last year. I have a bach file and need to run 7z t command to test zip files and write result in a log file.

I did something. it creates log file and test files in cmd line. I see that testing the files running on screen, but not write it into log file. I am not fimiliar with a batch file and 7zip. Please help meeee

  BGM said:
Ok, so with the great help from Wilhelmus I finally achieved my goal! :)

Here?s the code in case anyone is interested... It accepts a path name of where the files are located as an argument at the command line and runs through all matching files checking the integrity before attempting an unzip if they are valid..

Most importantly doesn?t bomb out if they are invalid! Woo

@echo off

REM Map source location to a drive letter
NET USE z: /delete
NET USE z: \\server\folder\sub /p:yes


REM Copy all zip files in mapped folder to temp directory 
ROBOCOPY Z:\  %1 /MIN:5


REM Change to 7zip directory
cd "c:\Program Files\7-Zip"
c:


REM Process each file in the temp directory..
for /f %%a in ('dir /b %1\b_*.zip') do call :PROCESS %1 %%a
GOTO :EOF


:PROCESS
REM Test the integrity of the file
7z t %1\%2


REM 0 = no error, else error.
IF %ERRORLEVEL% == 0 ( GOTO EXTRACT ) ELSE ( GOTO ERROR )


REM Extract the valid files into the temp directory
:EXTRACT
7z e %1\%2 -o%1 -y
GOTO END


:ERROR
echo Error: %ERRORLEVEL%


:END

This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Posts

    • misleading its one word to describe what M$ have done, windows 10 perform better on older hardware and even on new hardware sometimes, windows 11 its a mess and no one want to use it for many good reasons, until they listen its customers read the feedback hub comments and maybe backoff its forced requiremens, they are having a vista and 8 moment.
    • Media Player Classic - Home Cinema 2.5.0 by Razvan Serea Media Player Classic - Home Cinema (MPC-HC) is a free and open-source video and audio player for Windows. MPC-HC is based on the original Guliverkli project (which is no longer maintained) and contains many additional features and bug fixes. As the continuation of the original Media Player Classic, MPC-HC isn’t flashy but it works with nearly any media format. MPC-HC uses DXVA technology to pass decoding operations to your modern video card, enhancing your viewing experience. And MPC-HC supports both physical and software DVDs with menus, chapter navigation, and subtitles. Overview of features A lot of people seem to be unaware of some of the awesome features that have been added to MPC-HC in the past years. Here is a list of useful options and features that everyone should know about: Dark interface Menu > View > Dark Theme When using dark theme it is also possible to change the height of the seekbar and size of the toolbar buttons. Options > Advanced Video preview on the seekbar Options > Tweaks > Show preview on seek bar Adjust playback speed Menu > Play > Playback rate The buttons in the player that control playback rate take a 2x step by default. This can be customized to smaller values (like 10%): Options > Playback > Speed step Adjusting playback speed works best with the internal audio renderer. This also has automatic pitch correction. Options > Playback > Output > Audio Renderer MPC-HC can remember playback position, so you can resume from that point later Options > Player > History You can quickly seek through a video with Ctrl + Mouse Scrollwheel. You can jump to next/previous file in a folder by pressing PageUp/PageDown. You can perform automatic actions at end of file. For example to go to next file or close player. Options > Playback > After Playback (permanent setting) Menu > Play > After Playback (for current file only) A-B repeat - You can loop a segment of a video. Press [ and ] to set start and stop markers. You can rotate/flip/mirror/stretch/zoom the video Menu > View > Pan&Scan This is also easily done with hotkeys (see below). There are lots of keyboard hotkeys and mouse actions to control the player. They can be customized as well. Options > Player > Keys Tip: there is a search box above the table. You can stream videos directly from Youtube and many other video websites You can stream videos directly from Youtube and many other video websites Put yt-dlp.exe or youtube-dl.exe in the MPC-HC installation folder. Then you can open website URLs in the player: Menu > File > Open File/URL You can even download those videos: Menu > File > Save a copy Tip: to be able to download in best quality with yt-dlp/youtube-dl, it is recommended to also put ffmpeg.exe in the MPC-HC folder. Several YDL configuration options are found here: Options > Advanced This includes an option to specify the location of the .exe in case you don't want to put it in MPC-HC folder. Play HDR video This requires using madVR or MPC Video Renderer. After installation these renderers can be selected here: Options > Playback > Output Ability to search for and download subtitles, either automatically or manually (press D): Options > Subtitles > Misc Besides all these (new) features, there have also been many bugfixes and internal improvements in the player in the past years that give better performance and stability. It also has updated internal codecs. Support was added for CUE sheets, WebVTT subtitles, etc. Media Player Classic - Home Cinema 2.5.0 changelog: Updated LAV Filters to version 0.80-1-gb9116 Updated MPC Video Renderer to version 0.9.9.2400 Several small fixes and improvements. Graphics Designers Wanted for New Toolbar Buttons A new toolbar is planned for implementation in the player, featuring optional extra buttons and fully customizable layouts. As a result, existing custom toolbar designs will no longer be supported in the future. New button designs are needed, and contributions from graphics designers are welcome. Those interested in helping create the new toolbar are encouraged to read the dedicated information page. Download: MPC-HC 2.5.0 (x64) | Standalone | ~20.0 MB (Open Source) Download: MPC-HC 2.5.0 (x86) | Standalone Links: MPC-HC Home Page | Screenshot Get alerted to all of our Software updates on Twitter at @NeowinSoftware
    • Then don't put it on an IoT VLAN but put it on your main, trusted, VLAN. If you put it on a different VLAN you lose printer discovery.
    • For me it isn't usable because I'm a power user. I need Wayland but I also need remote desktop. VNC isn't a thing with Wayland and freeRDP isn't nearly ready enough yet either. If I was less demanding (didn't need remote desktop or ran Xorg) I would probably be fine.
    • From Microsoft to RedHat, escape an American company for an American company, that would be funny
  • Recent Achievements

    • Week One Done
      emptyother earned a badge
      Week One Done
    • Week One Done
      DarkWun earned a badge
      Week One Done
    • Very Popular
      valkyr09 earned a badge
      Very Popular
    • Week One Done
      suprememobiles earned a badge
      Week One Done
    • Week One Done
      Marites earned a badge
      Week One Done
  • Popular Contributors

    1. 1
      +primortal
      571
    2. 2
      ATLien_0
      183
    3. 3
      +FloatingFatMan
      173
    4. 4
      Xenon
      124
    5. 5
      Michael Scrip
      117
  • Tell a friend

    Love Neowin? Tell a friend!