windows extract files

Discussion in 'Windows 10 Upgrade and Installation' started by BKChedlia, Sep 14, 2016.

  1. BKChedlia

    BKChedlia New Member

    Joined:
    Sep 14, 2016
    Messages:
    3
    Likes Received:
    0
    Hi,
    I don't know if it's a right place to ask this question ...
    I have a shared folder of zip files, I want to unzip them and put the new folder(same name as zip folder with files extracted in it ) in new location each time there's a new zip in shared folder, is there a tool how can do it ? or I need to develop a batch ?
    thank you
     
  2. Neemobeer

    Neemobeer Windows Forum Team
    Staff Member

    Joined:
    Jul 4, 2015
    Messages:
    2,396
    Likes Received:
    360
    I don't know of any application that will monitor and process zip archives like that, but you could create a powershell script and set it up as a scheduled task to check for newly added zips and process them.
     
  3. BIGBEARJEDI

    BIGBEARJEDI Honorable Member
    Premium Supporter

    Joined:
    Jan 28, 2013
    Messages:
    1,778
    Likes Received:
    214
    Hi and welcome to the Forum :up:

    Take a look at this link here: How to Use 7Zip to Create Multiple Compressed Folders in One Go

    The article tells you how to do this to create both unzipped and zipped files into your target directory using the free 7zip utility. I've been using 7zip for years, and it's a safe and easy to use program.:thumbs_up: I'm not sure if you're intended for the unzip event to run every time there is a new zip added to the shared source folder automatically or not. But, this batch file will do most of the work for you. You can probably use the Windows scheduler or a 3rd party event scheduler app to read the shared folder, and create a trigger within the scheduler app to sense any changes (new file additions or deletions) and then have the scheduler app call the 7zip batch file shown in the article (only 1 line of code). The 7zip batch file will do the rest. I've seen something similar in XP and Vista done with the built-in Windows scheduler app. You can probably google it, and it's pretty easy to use. Most of the work would be creating the 7zip batch file to unzip to multiple target directories sequentially--and this batch file already does that for you!

    Give it a try,:)
    <<<BIGBEARJEDI>>>
     
  4. BIGBEARJEDI

    BIGBEARJEDI Honorable Member
    Premium Supporter

    Joined:
    Jan 28, 2013
    Messages:
    1,778
    Likes Received:
    214
    @neemo: I think we're on the same page here! The link to the 7zip batch file should help her get started.
    BBJ
     
  5. Neemobeer

    Neemobeer Windows Forum Team
    Staff Member

    Joined:
    Jul 4, 2015
    Messages:
    2,396
    Likes Received:
    360
    Yeah a script with the 7zip CLI would work too. I tend to recommend powershell because you can accomplish the task without any extra software.
     
  6. BKChedlia

    BKChedlia New Member

    Joined:
    Sep 14, 2016
    Messages:
    3
    Likes Received:
    0
    thank you for the help,yes I would like to unzip added zip files automatically, I will try it,
    meanwhile I found a batch :

    @echo off
    setlocal
    cd /d %~dp0
    Call :UnZipFile "C:\path\unzipped\" "c:\path\zipped\batch.zip"
    exit /b

    :UnZipFile <ExtractTo> <newzipfile>
    set vbs="%temp%\_.vbs"
    if exist %vbs% del /f /q %vbs%
    >%vbs% echo Set fso = CreateObject("Scripting.FileSystemObject")
    >>%vbs% echo If NOT fso.FolderExists(%1) Then
    >>%vbs% echo fso.CreateFolder(%1)
    >>%vbs% echo End If
    >>%vbs% echo set objShell = CreateObject("Shell.Application")
    >>%vbs% echo set FilesInZip=objShell.NameSpace(%2).items
    >>%vbs% echo objShell.NameSpace(%1).CopyHere(FilesInZip)
    >>%vbs% echo Set fso = Nothing
    >>%vbs% echo Set objShell = Nothing
    cscript //nologo %vbs%
    if exist %vbs% del /f /q %vbs%

    but it works for 1 zip and not all,

    this code didn't work for me :
    @echo off
    setlocal
    cd /d %~dp0
    for %%a in (*.zip) do (
    Call :UnZipFile "C:\Temp\%%~na\" "c:\path\to\%%~nxa"
    )
    exit /b
    any ideas ?
     
  7. Neemobeer

    Neemobeer Windows Forum Team
    Staff Member

    Joined:
    Jul 4, 2015
    Messages:
    2,396
    Likes Received:
    360
    Batch files are so ugly and difficult to follow lol. I wrote this very simply powershell script that will work. You only need to change the unzipDirectory and zipDirectory paths

    Code:
    $unzipDirectory = "C:\Users\username\Desktop\Unzip"
    $zipDirectory = "C:\Users\username\Desktop\Zip"
    
    $zipFiles = Get-ChildItem -Path $zipDirectory -Filter "*.zip"
    
    Foreach($zipFile in $zipFiles)
    {
        $unzipPath = "$($unzipDirectory)\$($zipFile.Name.Split(".")[0])"
        If (-not (Test-Path $unzipPath))
        {
            New-Item -Path $unzipPath -ItemType Directory
    
            $shellObject = New-Object -ComObject shell.application
            $zipArchive = $shellObject.NameSpace($zipFile.FullName)
    
            foreach($file in $zipArchive.items())
            {
                $shellObject.NameSpace($unzipPath).copyhere($file)
            }
        }
    }
     
    BKChedlia likes this.
  8. BKChedlia

    BKChedlia New Member

    Joined:
    Sep 14, 2016
    Messages:
    3
    Likes Received:
    0
    I found this code to watch the folder, but I am a begginer in powershell, so I don't know how it will work automatically, and how to add your code to this code :

    $folder = 'c:\....'
    $filter = '*.*'
    $fsw = New-Object IO.FileSystemWatcher $folder, $filter
    $fsw.IncludeSubdirectories = $true
    $fsw.NotifyFilter = [IO.NotifyFilters]'DirectoryName' # just notify directory name events
    $onCreated = Register-ObjectEvent $fsw Created -SourceIdentifier FileCreated -Action {
    #how can I call the unzip script ? }
     
    #8 BKChedlia, Sep 16, 2016
    Last edited: Sep 16, 2016
  9. Neemobeer

    Neemobeer Windows Forum Team
    Staff Member

    Joined:
    Jul 4, 2015
    Messages:
    2,396
    Likes Received:
    360
    There is no trigger to detect a file added to a directory. You can use "On a schedule" Run it Daily and under Advanced Settings select "Repeat task every" can go as low as 5 minutes.

    Under general just have the task run as SYSTEM and run whether a use is logged in or not.
    The other option to having it run all the time is you could have it run once and add a loop into the powershell code so it simply runs all the time on a loop.

    Wrap the following code around the above code.

    While($true)
    {
    [code from above]

    Start-Sleep -Seconds #ofseconds to sleep

    }
     

Share This Page

Loading...