Feb 01 2022 12:27 PM
Hi There,
Can someone assist with my code below. It wont create the sub directory and move the .zip file to the destination folder. I need the script to watch for new .zip files, create a subfolder with the day number and move the .zip file to this new folder. Code below:
$ZipFileSearchFolder = "C:\TESTsearch"
$DestionationFolder = "C:\TESTdestination\2022"
$Filter = "*.zip"
if(-not (Test-Path $DestionationFolder))
{
New-Item -Path $DestionationFolder -ItemType Directory
}
$Watcher = New-Object IO.FileSystemWatcher $ZipFileSearchFolder, $Filter -Property @{
IncludeSubdirectories = $true
NotifyFilter = [IO.NotifyFilters]'FileName, LastWrite'
}
$OnCreated = Register-ObjectEvent $Watcher Created -SourceIdentifier FileCreated -Action {
$DayOfYear = (Get-Date).DayOfYear
$SourcePath = $Event.SourceEventArgs.FullPath
$SourceName = $Event.SourceEventArgs.Name
$File = Get-Item $SourcePath
$NewName = $File.BaseName+"-"+$DayOfYear+$File.Extension
Move-Item -Path $SourcePath -Destination $DestionationFolder\$NewName -Force -Verbose
}
Thanks
Feb 02 2022 12:28 AM
@DuaneH It looks like there is a problem with the Destination path construction, try this
$NewName = "{0}-{1}{2}" -f ($File.BaseName), $DayOfYear, ($File.Extension)
Move-Item -Path $SourcePath -Destination (join-path $DestionationFolder $NewName) -Force -Verbose
This is working for me.
Feb 02 2022 02:13 AM - edited Feb 02 2022 02:14 AM
Solution
Changed it a little to this:
$ZipFileSearchFolder = "C:\TESTsearch"
$DestionationFolder = "C:\TESTdestination\2022"
$Filter = "*.zip"
if(-not (Test-Path $DestionationFolder))
{
New-Item -Path $DestionationFolder -ItemType Directory
}
$Watcher = New-Object IO.FileSystemWatcher $ZipFileSearchFolder, $Filter -Property @{
IncludeSubdirectories = $true
NotifyFilter = [IO.NotifyFilters]'FileName, LastWrite'
}
$OnCreated = Register-ObjectEvent $Watcher Created -SourceIdentifier FileCreated -Action {
$DayOfYear = (Get-Date).DayOfYear
$SourcePath = $Event.SourceEventArgs.FullPath
$SourceName = $Event.SourceEventArgs.Name
$File = Get-Item $SourcePath
if (-not (Test-Path "$($DestionationFolder)\$($DayOfYear)")) {
New-Item -Path "$($DestionationFolder)\$($DayOfYear)" -ItemType Directory
}
$NewName = $File.BaseName+"-"+$DayOfYear+$File.Extension
Move-Item -Path $SourcePath -Destination "$($DestionationFolder)\$($DayOfYear)" -Force -Verbose
}
But @Jonathan_Allen has a nice looking solution as well ;)
Feb 02 2022 11:05 AM
@Harm_Veenstra thanks so much that has fixed it, Cheers!