BKChedlia
New Member
- Joined
- Sep 14, 2016
- Messages
- 3
- Thread Author
- #1
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
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
- Joined
- Jul 4, 2015
- Messages
- 8,973
- Joined
- Jan 28, 2013
- Messages
- 2,419
Hi and welcome to the Forum
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. 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>>>
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. 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>>>
- Joined
- Jan 28, 2013
- Messages
- 2,419
- Joined
- Jul 4, 2015
- Messages
- 8,973
BKChedlia
New Member
- Joined
- Sep 14, 2016
- Messages
- 3
- Thread Author
- #6
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 ?
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 ?
- Joined
- Jul 4, 2015
- Messages
- 8,973
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
New Member
- Joined
- Sep 14, 2016
- Messages
- 3
- Thread Author
- #8
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 ? }
$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 ? }
- Joined
- Jul 4, 2015
- Messages
- 8,973
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
}
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
}
Similar threads
- Featured
- Article
- Replies
- 0
- Views
- 47
- Replies
- 0
- Views
- 254
- Replies
- 0
- Views
- 62
- Replies
- 0
- Views
- 126
- Replies
- 0
- Views
- 52