Import-Module PSWriteColor #Define important variables and information $Locations = @( 'F:\Library\Graphic Novels\Comic' 'F:\Library\Graphic Novels\Manga' 'F:\Library\Graphic Novels\WebToon' 'F:\Library\Graphic Novels\Comic\Block 109' 'F:\Library\Graphic Novels\Comic\Sabrina' 'F:\Library\Graphic Novels\Comic\Doggybags' 'F:\Library\Graphic Novels\Comic\Alien' 'F:\Library\Graphic Novels\Comic\Hawkman' 'F:\Library\Graphic Novels\Comic\Outer Darkness' 'F:\Library\Graphic Novels\Comic\Secret Wars' 'F:\Library\Graphic Novels\Comic\Teenage Mutant Ninja Turtles' 'F:\Library\Graphic Novels\Comic\Hulk' 'F:\Library\Graphic Novels\Comic\Wonder Woman' "F:\Library\Graphic Novels\Comic\Conan The Barbarian" "F:\Library\Graphic Novels\Comic\Avengers" "F:\Library\Graphic Novels\Comic\Amory Wars" "F:\Library\Graphic Novels\Comic\Batman" "F:\Library\Graphic Novels\Comic\Borderlands" "F:\Library\Graphic Novels\Comic\Brit" "F:\Library\Graphic Novels\Comic\Clive Barker" "F:\Library\Graphic Novels\Comic\Colder" "F:\Library\Graphic Novels\Comic\Constantine" "F:\Library\Graphic Novels\Comic\Critical Role" "F:\Library\Graphic Novels\Comic\Dark Ark" "F:\Library\Graphic Novels\Comic\Deadpool" "F:\Library\Graphic Novels\Comic\Dicks" "F:\Library\Graphic Novels\Comic\Ether" "F:\Library\Graphic Novels\Comic\Fables" "F:\Library\Graphic Novels\Comic\Grimm Fairy Tales" "F:\Library\Graphic Novels\Comic\Guardians of the Galaxy" "F:\Library\Graphic Novels\Comic\Gwenpool" "F:\Library\Graphic Novels\Comic\Hack Slash" "F:\Library\Graphic Novels\Comic\Harley Quinn" "F:\Library\Graphic Novels\Comic\Hellboy" "F:\Library\Graphic Novels\Comic\Hercules" "F:\Library\Graphic Novels\Comic\Joker" "F:\Library\Graphic Novels\Comic\Justice League" "F:\Library\Graphic Novels\Comic\Kick-Ass" "F:\Library\Graphic Novels\Comic\Lazarus" "F:\Library\Graphic Novels\Comic\Lobo" "F:\Library\Graphic Novels\Comic\Mad Max" "F:\Library\Graphic Novels\Comic\Teen Titans" "F:\Library\Graphic Novels\Comic\Midnighter" "F:\Library\Graphic Novels\Comic\Nailbiter" "F:\Library\Graphic Novels\Comic\Pilot Season" "F:\Library\Graphic Novels\Comic\Punisher" "F:\Library\Graphic Novels\Comic\Predator" "F:\Library\Graphic Novels\Comic\Rumble" "F:\Library\Graphic Novels\Comic\Sonic" "F:\Library\Graphic Novels\Comic\Star Wars" "F:\Library\Graphic Novels\Comic\Suicide Squad" "F:\Library\Graphic Novels\Comic\Spider-Man" "F:\Library\Graphic Novels\Comic\The Boys" "F:\Library\Graphic Novels\Comic\The Last Zombie" "F:\Library\Graphic Novels\Comic\The Realm" "F:\Library\Graphic Novels\Comic\The Walking Dead" "F:\Library\Graphic Novels\Comic\Thor" "F:\Library\Graphic Novels\Comic\Transformers" "F:\Library\Graphic Novels\Comic\Venom" "F:\Library\Graphic Novels\Comic\Vikings" "F:\Library\Graphic Novels\Comic\WWE" "F:\Library\Graphic Novels\Comic\X-Men" "F:\Library\Graphic Novels\Comic\X-Men\Wolverine" "F:\Library\Graphic Novels\Comic\X-Men\X-Men" "F:\Library\Graphic Novels\Manga\GUNNM" "F:\Library\Graphic Novels\Manga\Battle Through The Heavens" "F:\Library\Graphic Novels\Manga\Boku No Hero Academia" "F:\Library\Graphic Novels\Manga\Dr. Stone" "F:\Library\Graphic Novels\Manga\Franken Fran" "F:\Library\Graphic Novels\Manga\Kakegurui" "F:\Library\Graphic Novels\Manga\Kami-Sama No Iutoori" "F:\Library\Graphic Novels\Manga\Shaman King" "F:\Library\Graphic Novels\Manga\Tensei Shitara Slime Datta Ken" "F:\Library\Graphic Novels\Manga\Touhou" "F:\Library\Graphic Novels\Manga\Touhou\Official" "F:\Library\Graphic Novels\Manga\Touhou\Doujinshi" ) $rootDirectory = 'F:\Library\Graphic Novels' [string[]]$blackList = @("*Director's cut*",'*16777215*', '*Occult Edition*', '*Preview*', '*All Out War Artist Proof Edition*','*Script*','*I Hate It Here*','*Filth of the City*', 'folder*', '*TPB*', '*annual*', '*special*', '*full*', '*primer*', '*Colección*', '*book*', '*1000000*', '*extra*') [string[]]$whiteList = @('Wolverine (2003)','Borderlands ~ Tannis & the Vault', 'Star Wars ~ Republic','Star Wars ~ Rebels Magazine','*Akira*','Gyo','Uncanny X-Men (2013)','Franken Fran', 'GUNNM', 'The Transformers (2014)', 'The Transformers ~ Regeneration One', 'Transformers ~ Energon', 'Dark Wolverine', 'Wolverine (2010)', 'All-New Guardians of the Galaxy', 'Incredible Hercules', 'Mighty Thor (2016)', 'Venom (2016)', 'Dorohedoro', 'Montage (WATANABE Jun)') $pattern = '((\d+)(\.\d)?)((?=\.cbz)|(?=\.zip))' #Pattern of the numbers [regex]$rx = $pattern #Functions downloaded from the internet function SortNaturally{ PARAM( [string[]]$strArray ) Add-Type -TypeDefinition @' using System; using System.Collections; using System.Collections.Generic; using System.Runtime.InteropServices; namespace NaturalSort { public static class NaturalSort { [DllImport("shlwapi.dll", CharSet = CharSet.Unicode)] public static extern int StrCmpLogicalW(string psz1, string psz2); public static System.Collections.ArrayList Sort(System.Collections.ArrayList foo) { foo.Sort(new NaturalStringComparer()); return foo; } } public class NaturalStringComparer : IComparer { public int Compare(object x, object y) { return NaturalSort.StrCmpLogicalW(x.ToString(), y.ToString()); } } } '@ return [NaturalSort.NaturalSort]::Sort($strArray) } function deleteDuplicates { param( [Parameter( Mandatory=$True, ValueFromPipeline=$True, ValueFromPipelineByPropertyName=$True )] [string[]]$PathDuplicates) $DuplicatePaths = Get-ChildItem $PathDuplicates -Recurse| Get-FileHash | Group-Object -Property Hash | Where-Object -Property Count -gt 1 | ForEach-Object { $_.Group.Path | Select-Object -First ($_.Count -1)} $TotalCount = (Get-ChildItem $PathDuplicates).Count Write-Warning ("You are going to delete {0} files out of {1} total. Please confirm the prompt" -f $DuplicatePaths.Count, $TotalCount) Invoke-Item $DuplicatePaths $DuplicatePaths | Remove-Item -Confirm } #My own functions function Write-Separator{Write-Color '---' -Color DarkGray} function checkDecimals($name, $indexNumber, $testFile){ $testFileDecimal = @( $name + ' - ' + $indexNumber + '.' + 0 + '.cbz' $name + ' - ' + $indexNumber + '.' + 1 + '.cbz' $name + ' - ' + $indexNumber + '.' + 2 + '.cbz' $name + ' - ' + $indexNumber + '.' + 3 + '.cbz' $name + ' - ' + $indexNumber + '.' + 4 + '.cbz' $name + ' - ' + $indexNumber + '.' + 5 + '.cbz' $name + ' - ' + $indexNumber + '.' + 6 + '.cbz' $name + ' - ' + $indexNumber + '.' + 7 + '.cbz' $name + ' - ' + $indexNumber + '.' + 8 + '.cbz' $name + ' - ' + $indexNumber + '.' + 9 + '.cbz' ) $openDir = $true for ($i = 0; $i -lt $testFileDecimal.Count; $i++) { if (Test-Path($testFileDecimal[$i])){ $openDir = $false } } if ($openDir -eq $true){ $dir = Get-Location Write-Color 'The issue ', $testFile, ' is missing from the directory ', $dir -Color White, DarkRed, White, Red } } function removeEmptyDirectory{ remove-emtpy.ps1 -Path .\ -Remove -VerifyNoEmpty } function decompress{ foreach ($file in Get-ChildItem *.cbz -Recurse) { #Creates a list of CBZ files on all the subdirectories and runs for each one Clear-Host #This will make the screen flash so it becomes somewhat readable. Set-Location $file.DirectoryName #Changes location to a children directory to avoid uncompressing into the wrong folders 7z x $file -o* Remove-Item $file.FullName #Removes the CBZ file after extracted } } function fixZip{ foreach ($file in Get-ChildItem *.cbz -Recurse) { #Creates a list of CBZ files on all the subdirectories and runs for each one Clear-Host #This will make the screen flash so it becomes somewhat readable. Set-Location $file.DirectoryName #Changes location to a children directory to avoid uncompressing into the wrong folders 7z x $file -o* $dirCreated = [io.path]::GetFileNameWithoutExtension($file) if (Test-Path -Path $dirCreated){ #Get-ChildItem -Recurse ComicInfo.xml | Remove-Item Remove-Item $file.FullName #Removes the CBZ file after extracted 7z a "$dirCreated.zip" .\$dirCreated\* Remove-Item $dirCreated -Force -Recurse } } } function compress{ #Compress every comic folder that contains valid filetypes Set-Location $rootDirectory #Goes to the root in case anything changed foreach ($directory in Get-ChildItem -recurse -Directory){ Set-Location $directory.FullName if ((Test-Path .\*.jpg -Exclude 'folder.jpg') -or (Test-Path .\*.png -Exclude 'folder.png') -or (Test-Path .\*.jpeg -Exclude 'folder.jpeg')){ #checks if the file contains valid images otherwise skips Set-Location $directory.Parent.FullName $fileArray = Get-ChildItem $directory.FullName #foreach ($file in Get-ChildItem $directory.FullName){#Compress the folder with all the files found inside $chunkSize = 100 $outFileArray = @() $parts =[math]::Ceiling($fileArray.Count / $chunkSize) if($fileArray.Count -eq 1){ #$fileArray.FullName #$directory 7z a "$directory.zip" $fileArray.FullName Remove-Item $fileArray.FullName -Force if ((Get-ChildItem $directory).Count -eq 0){ Remove-Item $directory } } elseif($fileArray.Count -gt 1){ for($i=0; $i -lt $parts; $i++){ $start = $i*$chunkSize $end = (($i+1)*$chunkSize)-1 $outFileArray += ,@($fileArray[$start..$end]) #Clear-Host #FLashes the screen so its possible to read #7z a "$directory.zip" $file.FullName #Remove-Item $file.FullName -Force } for ($i=0; $i -lt $outFileArray.Count; $i++){ #$outFileArray[$i] 7z a "$directory.zip" $outFileArray[$i].FullName Remove-Item $outFileArray[$i].FullName -Force } if ((Get-ChildItem $directory).Count -eq 0){ Remove-Item $directory } } } } Set-Location $rootDirectory #As the progam exits the loop go back to the root directory } function cleanNames{ $allDirs = Get-ChildItem -Directory $allFiles = Get-ChildItem -Recurse -File -Depth 1 #Rename files with year on the name so the scrapper can identify them better $patternConflict = @( '\((\d{4})\) ' '(? #Rename directories for ($i = 0; $i -lt $nameConflict.Count; $i++){ #$nameFilter = '*' + $nameConflict[$i] + '*' $filteredDirs = $allDirs | Where-Object {$_.Name -imatch $nameConflict[$i]} $filteredFiles = $allFiles | Where-Object {$_.Name -imatch $nameConflict[$i]} foreach ($conflictName in $filteredFiles){ if ($conflictName.Name.ToLower() -eq $conflictName.Name.Replace($nameConflict[$i], $nameFix[$i]).ToLower()){} else{ Write-Color $conflictName.Name, " will be renamed into ", $conflictName.Name.Replace($nameConflict[$i], $nameFix[$i]) -Color Red, White, Green Rename-Item $conflictName.FullName -NewName $conflictName.Name.Replace($nameConflict[$i], $nameFix[$i]) } } foreach ($conflictName in $filteredDirs){ $newDir = $conflictName.Name.Replace($nameConflict[$i], $nameFix[$i]) if(Test-Path ($newDir)){ foreach ($file in Get-ChildItem -Path $conflictName){Move-Item $file -Destination $newDir} } elseif(!(Test-Path ($newDir))){ Write-Separator Write-Color 'Will rename the directory ', $conflictName.Name, ' into ', $newDir -Color White, Red, White, Green Rename-Item $conflictName -NewName $newDir } } } } function folderCover{ Set-Location $rootDirectory $folderCoverArray = Get-ChildItem -Recurse -File 'folder*' <#foreach ($folderCover in $folderCoverArray){ Set-Location $folderCover.Directory $directoryFiles = Get-ChildItem -Exclude $blackList $firstFile = SortNaturally -strArray $directoryFiles | Select-Object -First 1 $firstFileDirectory = $firstFile.Split('.') 7z x $firstFile -o* Remove-Item $firstFile Move-Item $folderCover -Destination $firstFileDirectory[0] }#> $folderCoverArray Set-Location $rootDirectory <#$folderCoverArray = Get-ChildItem -Recurse -File '0' $folderCoverArray foreach ($file in $folderCoverArray){Rename-Item $file -NewName '0.jpg'} $folderCoverArray = Get-ChildItem -Recurse -File '0.jpg' foreach ($file in $folderCoverArray){ #magick mogrify -format png $file Remove-Item $file }#> } function pad{ #Pad filenames based on the newest number foreach ($directory in Get-ChildItem -recurse -Directory){ #Get directories Set-Location $directory #Changes to each child directory if ((Get-ChildItem | Measure-Object).Count -gt 0){ #If there are more than one files $directoryFiles = Get-ChildItem -Exclude $blackList if ($directoryFiles.Name -match $pattern){ #Loops trough all the files that contain a matching name #$lastFile = SortNaturally -strArray $directoryFiles | Select-Object -last 1 #Get the last file #Extract the number part of the name #[int]$number = $rx.match($lastFile).value foreach ($file in $directoryFiles){ $paddedDigits = "{0:D4}" -f [int]($file.Name | Select-String -Pattern $pattern).matches.Groups[2].Value #calculate new name $newName = $file.Name -replace ($pattern, $($paddedDigits+'$3')) #replace new name if ($newName -ne $file.Name){ Write-Color $file.Name, ' will be renamed into ', $newName -Color Red, White, Green Rename-Item $file -NewName $newName #rename file } } <#if (($number -le 9999) -and ($number -ge 900)){#If file is part of a long series foreach ($file in $directoryFiles) { $paddedDigits = "{0:D4}" -f [int]($file.Name | Select-String -Pattern $pattern).matches.Groups[2].Value #calculate new name $newName = $file.Name -replace ($pattern, $($paddedDigits+'$3')) #replace new name if ($newName -ne $file.Name){ Write-Color $file.Name, ' will be renamed into ', $newName -Color Red, White, Green Rename-Item $file -NewName $newName #rename file } } } if (($number -le 899) -and ($number -ge 70)){#If file is part of a long series foreach ($file in $directoryFiles) { $paddedDigits = "{0:D3}" -f [int]($file.Name | Select-String -Pattern $pattern).matches.Groups[2].Value #calculate new name $newName = $file.Name -replace ($pattern, $($paddedDigits+'$3')) #replace new name if ($newName -ne $file.Name){ Write-Color $file.Name, ' will be renamed into ', $newName -Color Red, White, Green Rename-Item $file -NewName $newName #rename file } } } elseif (($number -le 99) -and ($number -ge 10)){#If file is part of a short series foreach ($file in $directoryFiles) { $paddedDigits = "{0:D2}" -f [int]($file.Name | Select-String -Pattern $pattern).matches.Groups[2].Value #calculate new name $newName = $file.Name -replace ($pattern, $($paddedDigits+'$3')) #replace new name if ($newName -ne $file.Name){ Write-Color $file.Name, ' will be renamed into ', $newName -Color Red, White, Green Rename-Item $file -NewName $newName #rename file } } } elseif (($number -le 9)){#If file is part of a short series foreach ($file in $directoryFiles) { $paddedDigits = "{0:D1}" -f [int]($file.Name | Select-String -Pattern $pattern).matches.Groups[2].Value #calculate new name $newName = $file.Name -replace ($pattern, $($paddedDigits+'$3')) #replace new name if ($newName -ne $file.Name){ Write-Color $file.Name, ' will be renamed into ', $newName -Color Red, White, Green Rename-Item $file -NewName $newName #rename file } } }#> } } } } function decimals{ foreach ($directory in Get-ChildItem -Recurse -Directory -Exclude 'Akira'){ Set-Location $directory $files = Get-ChildItem -File -Recurse -Exclude $blackList if ($files.Name -match '(\.\d)(?=\.cbz)'){ foreach ($file in $files -match '(\.\d)(?=\.cbz)'){ #$file.FullName $splitName = $file.Name.Split('.') $origName = $splitName[0] + '.cbz' if(Test-Path $origName){ $newName = $splitName[0] + '.0.cbz' Write-Color $origName, ' will be renamed into ', $newName -Color Red, White, Green Rename-Item $origName -NewName $newName } } } } } function missingFiles{ foreach ($directory in Get-ChildItem -Directory -Exclude $whiteList){ Set-Location $directory $directoryFiles = Get-ChildItem -Exclude $blackList if ($directoryFiles.Name -match $pattern){ [string]$lastFile = SortNaturally -strArray $directoryFiles.Name | Select-Object -last 1 $number = $rx.match($lastFile).value $number = $number - 1 #'((\d+)(\.\d)?)((?=\.cbz)|(?=\.zip))' #$name = $lastFile.Split(' - ') #Split the name of the file structure $name = [regex]::Split($lastFile, ' - \d+') #Split the name of the file structure [int]$number = $number for ($i=1; $i -le $number; $i++){ $indexNumber = "{0:0000}" -f $i $testFile = $name[0] + ' - ' + $indexNumber + '.cbz' if(!(Test-Path ($testFile))){ checkDecimals $name[0] $indexNumber $testFile } } <#for ($i=1; $i -le $number; $i++){ if (($number -le 9999) -and ($number -ge 900)){ $indexNumber = "{0:0000}" -f $i $testFile = $name[0] + ' - ' + $indexNumber + '.cbz' if(!(Test-Path ($testFile))){ checkDecimals $name[0] $indexNumber $testFile } } if (($number -le 899) -and ($number -ge 70)){ $indexNumber = "{0:000}" -f $i $testFile = $name[0] + ' - ' + $indexNumber + '.cbz' if(!(Test-Path ($testFile))){ checkDecimals $name[0] $indexNumber $testFile } } elseif (($number -le 99) -and ($number -ge 10)){ $indexNumber = "{0:00}" -f $i $testFile = $name[0] + ' - ' + $indexNumber + '.cbz' if(!(Test-Path ($testFile))){ checkDecimals $name[0] $indexNumber $testFile } } elseif (($number -le 9)){ $indexNumber = "{0:0}" -f $i $testFile = $name[0] + ' - ' + $indexNumber + '.cbz' if(!(Test-Path ($testFile))){ checkDecimals $name[0] $indexNumber $testFile } } elseif ($number -eq 100){ $testFile = $name[0] + ' - ' + 100 + '.cbz' if(!(Test-Path ($testFile))){ $testFile $openDir = $true } } }#> if($openDir) { Invoke-Item . Read-Host -Prompt "Continue" } } } } function partZip { $partListDirectory = Get-ChildItem -Recurse -File *part* $partListDirectory = $partListDirectory.Directory | Sort-Object | Select-Object -Unique foreach ($partDirectory in $partListDirectory){ $partListFile = @() Set-Location $partDirectory foreach ($partFile in Get-ChildItem -File *part*){ $partListFileTemp = $partFile.Name.Split(" (Part") $partListFile += $partListFileTemp[0] } $partListFile = $partListFile | Sort-Object | Select-Object -Unique mkdir $partListFile <#foreach ($partListFileFile in $partListFile){ foreach ($file in Get-ChildItem){ $partListFileFile $file.NameString $file.NameString.Contains("$partListFile") } }#> } } function Move-Directories{ $moveLocations =@( "F:\Library\Graphic Novels\Comic\" "F:\Library\Graphic Novels\Manga\" ) foreach ($moveLocation in $moveLocations) { Set-Location $moveLocation $dirCollection = @( 'WWE' 'Venom' 'Transformers' 'The Last Zombie' 'The Boys' 'Star Wars' 'Pilot Season' 'Midnighter' 'Lobo' 'Hellboy' 'Fables' 'Colder' 'Clive Barker' 'Brit' 'Amory Wars' 'Guardians of the Galaxy' 'Klaus' 'Batman' 'Critical Role' 'Hack Slash' 'Justice League' 'Nailbiter' 'Lazarus' 'Dark Ark' 'Dicks' 'Ether' 'Grimm Fairy Tales' 'Hercules' 'Thor' 'Punisher' 'Rumble' 'Sonic' 'The Realm' 'Vikings' 'Mad Max' 'Harley Quinn' 'Joker' 'Suicide Squad' 'Deadpool' 'Gwenpool' 'Borderlands' 'Battle Through The Heavens' 'Boku No Hero Academia' 'Franken Fran' 'Kakegurui' 'Shaman King' 'GUNNM' 'Touhou' "Teen Titans" 'Avengers' 'Block 109' 'Sabrina' 'Doggybags' 'Hawkman' 'Outer Darkness' 'Secret Wars' 'Teenage Mutant Ninja Turtles' 'Hulk' 'Wonder Woman' 'Predator' ) $dirCollectionBlacklist = @( 'Kid Lobotomy' 'War Of The Realms ~ Omega' 'Teether' 'Detective Conan' ) $xmenCollection = @( 'Wolverine' 'Logan' 'Sabretooth' 'X-Men' 'X-Force' ) $kickassCollection = @( 'Hit-Girl' 'Kick-Ass' ) $constantineCollection = @( 'Constantine' 'Hellblazer' ) $spiderCollection = @( 'Spider' ) $slimeCollection = @( 'Shitara Slime Datta Ken' 'Tenchura! Tensei Shitara Slime Datta Ken' ) $conanCollection = @( 'Conan' 'Cimmerian' ) $alienCollection =@( 'Alien' 'Prometheus' ) $collections = $conanCollection, $xmenCollection, $kickassCollection, $constantineCollection, $spiderCollection, $slimeCollection, $alienCollection $collectionsDirs = @( 'Conan The Barbarian' 'X-Men' 'Kick-Ass' 'Constantine' 'Spider-Man' 'Tensei Shitara Slime Datta Ken' 'Alien' ) #Collections $Directories = Get-ChildItem -Directory -Exclude $dirCollectionBlacklist for ($i = 0; $i -lt $dirCollection.Count; $i++){ $matchingDirectories = $Directories | Where-Object {$_.Name -match $dirCollection[$i]} ForEach ($missplacedDirectory in $matchingDirectories){ if ($missplacedDirectory.Name -ne $dirCollection[$i]){ $destinationDir = $dirCollection[$i] + '\' + $missplacedDirectory.Name if(Test-Path $destinationDir){ $dir2move = Get-ChildItem -Path $missplacedDirectory Write-Color 'Will move ', $dir2move, ' into ', $destinationDir -Color White, yellow, White, Green Move-Item $dir2move -Destination $destinationDir } else{ Write-Color 'Will move ', $missplacedDirectory.Name, ' into ', $dirCollection[$i] -Color White, yellow, White, Green if(!(Test-Path $dirCollection[$i])){mkdir $dirCollection[$i]} Move-Item $missplacedDirectory -Destination $dirCollection[$i] } } } } #Special collections for ($i = 0; $i -lt $collections.Count; $i++){ for ($ii = 0; $ii -lt $collections[$i].Count; $ii++){ $currentCollection = $collections[$i][$ii] $matchingDirectories = $Directories | Where-Object {$_.Name -match $currentCollection} ForEach ($missplacedDirectory in $matchingDirectories){ if ($missplacedDirectory.Name -ne $collectionsDirs[$i]){ if(!(Test-Path $collectionsDirs[$i])){mkdir $collectionsDirs[$i]} Write-Color 'Will move ', $missplacedDirectory.Name, ' into ', $collectionsDirs[$i] -Color White, yellow, White, Green Move-Item $missplacedDirectory -Destination $collectionsDirs[$i] } } } } } #X-men folder Set-Location 'F:\Library\Graphic Novels\Comic\X-men' $Dirs = Get-ChildItem -Directory $wolvDirs = $Dirs | Where-Object {($_.Name -Match 'Wolverine' -or $_.Name -Match 'Sabretooth' -or $_.Name -Match 'Logan')} $xmenDirs = $Dirs | Where-Object {($_.Name -Match 'X-Men' -or $_.Name -Match 'X-Force')} $xCollections = $wolvDirs, $xmenDirs $xDirs = @( 'Wolverine' 'X-Men' ) For ($i = 0; $i -lt $xCollections.Count; $i++){ ForEach ($dir in $xCollections[$i]){ if ($dir.Name -ne $xDirs[$i]){ if (!(Test-Path $xDirs[$i])){mkdir $xDirs[$i]} $destinationDir = $xDirs[$i] + '\' + $dir.Name if(Test-Path $destinationDir){ $dir2move = Get-ChildItem -Path $dir Write-Color 'Will move ', $dir2move, ' into ', $destinationDir -Color White, yellow, White, Green Move-Item $dir2move -Destination $destinationDir } else{ Write-Color 'Will move ', $dir.Name, ' into ', $xDirs[$i] -Color White, yellow, White, Green if(!(Test-Path $xDirs[$i])){mkdir $xDirs[$i]} Move-Item $dir -Destination $xDirs[$i] } } } } } function DirectoryTree{ $parentDirectories = @() foreach ($directory in Get-ChildItem -Recurse -Directory){ Set-Location $directory $filesinside = Get-ChildItem if(($filesinside.Name -match 'pdf') -or ($filesinside.Name -match 'cbz') -or ($filesinside.Name -match 'jpg') -or ($filesinside.Name -match 'png')) {} else{ $locationString = Get-Location $parentDirectories += '"' + $locationString + '"' } } $parentDirectories > 'F:\Library\Tree.txt' } function Capitalize{ Set-Location 'F:\Library\Comic' foreach ($directory in Get-ChildItem -Recurse -Directory){ Set-Location $directory [string[]]$renamerBL = @("*.xml","*.pdf","*.cbz","Folder.jpg","Folder.png", "folder.jpg", "folder.png") $capitalizeFiles = Get-ChildItem -Exclude "*.xml","*.pdf","*.cbz","Folder.jpg","Folder.png", "folder.jpg", "folder.png" foreach ($file in $capitalizeFiles){ $file.FullName ReNamer.exe /silent /rename number $file Wait-Process -Name "ReNamer" } } <#Set-Location 'F:\Library\Graphic Novels\' foreach ($directory in Get-ChildItem -Directory){ ReNamer.exe /silent /rename Capitalize $directory.FullName Wait-Process -Name "ReNamer" }#> } function findCrossovers{ $seriesCollectionNames = @( "Amory Wars" "Batman" "Borderlands" "Brit" "Clive Barker" "Colder" "Constantine" "Critical Role" "Dark Ark" "Deadpool" "Dicks" "Ether" "Fables" "Grimm Fairy Tales" "Guardians of the Galaxy" "Gwenpool" "Hack Slash" "Harley Quinn" "Hellboy" "Hercules" "Joker" "Justice League" "Kick-Ass" "Lazarus" "Lobo" "Mad Max" "Midnighter" "Nailbiter" "Pilot Season" "Punisher" "Rumble" "Sonic" "Star Wars" "Suicide Squad" "The Boys" "The Last Zombie" "The Realm" "The Walking Dead" "Thor" "Transformers" "Venom" "Vikings" "WWE" "Wolverine" "X-Men" ) $seriesCollectionDirectories = @( "F:\Library\Graphic Novels\Comic\Amory Wars" "F:\Library\Graphic Novels\Comic\Batman" "F:\Library\Graphic Novels\Comic\Borderlands" "F:\Library\Graphic Novels\Comic\Brit" "F:\Library\Graphic Novels\Comic\Clive Barker" "F:\Library\Graphic Novels\Comic\Colder" "F:\Library\Graphic Novels\Comic\Constantine" "F:\Library\Graphic Novels\Comic\Critical Role" "F:\Library\Graphic Novels\Comic\Dark Ark" "F:\Library\Graphic Novels\Comic\Deadpool" "F:\Library\Graphic Novels\Comic\Dicks" "F:\Library\Graphic Novels\Comic\Ether" "F:\Library\Graphic Novels\Comic\Fables" "F:\Library\Graphic Novels\Comic\Grimm Fairy Tales" "F:\Library\Graphic Novels\Comic\Guardians of the Galaxy" "F:\Library\Graphic Novels\Comic\Gwenpool" "F:\Library\Graphic Novels\Comic\Hack Slash" "F:\Library\Graphic Novels\Comic\Harley Quinn" "F:\Library\Graphic Novels\Comic\Hellboy" "F:\Library\Graphic Novels\Comic\Hercules" "F:\Library\Graphic Novels\Comic\Joker" "F:\Library\Graphic Novels\Comic\Justice League" "F:\Library\Graphic Novels\Comic\Kick-Ass" "F:\Library\Graphic Novels\Comic\Lazarus" "F:\Library\Graphic Novels\Comic\Lobo" "F:\Library\Graphic Novels\Comic\Mad Max" "F:\Library\Graphic Novels\Comic\Midnighter" "F:\Library\Graphic Novels\Comic\Nailbiter" "F:\Library\Graphic Novels\Comic\Pilot Season" "F:\Library\Graphic Novels\Comic\Punisher" "F:\Library\Graphic Novels\Comic\Rumble" "F:\Library\Graphic Novels\Comic\Sonic" "F:\Library\Graphic Novels\Comic\Star Wars" "F:\Library\Graphic Novels\Comic\Suicide Squad" "F:\Library\Graphic Novels\Comic\The Boys" "F:\Library\Graphic Novels\Comic\The Last Zombie" "F:\Library\Graphic Novels\Comic\The Realm" "F:\Library\Graphic Novels\Comic\The Walking Dead" "F:\Library\Graphic Novels\Comic\Thor" "F:\Library\Graphic Novels\Comic\Transformers" "F:\Library\Graphic Novels\Comic\Venom" "F:\Library\Graphic Novels\Comic\Vikings" "F:\Library\Graphic Novels\Comic\WWE" "F:\Library\Graphic Novels\Comic\X-Men\Wolverine" "F:\Library\Graphic Novels\Comic\X-Men\X-Men" ) for ($i=0; $i -lt $seriesCollectionDirectories.Count; $i++){ set-location $seriesCollectionDirectories[$i] $files = Get-ChildItem -Recurse -File for($ii=0; $ii -lt $seriesCollectionNames.Count; $ii++){ if (!($files.Name -match $seriesCollectionNames[$i])){ } else { if($files.Name -match $seriesCollectionNames[$ii]){ foreach ($file in $files){ if ($seriesCollectionNames[$i] -eq $seriesCollectionNames[$ii]){} else{ #Write-Host 'Comparing ' + $seriesCollectionNames[$ii] + ' in ' $seriesCollectionNames[$i] $file.Name } } } } } } } function newest{ $dirs2Monitor = @( 'F:\Library\Graphic Novels\Manga\Boku No Hero Academia\Boku No Hero Academia' 'F:\Library\Graphic Novels\Manga\Boruto ~ Naruto Next Generations' 'F:\Library\Graphic Novels\Manga\Detective Conan' 'F:\Library\Graphic Novels\Manga\Dragon Ball Super' 'F:\Library\Graphic Novels\Manga\My Father Became A Cute Vtuber Girl!' 'F:\Library\Graphic Novels\Manga\Onepunch-Man' 'F:\Library\Graphic Novels\Manga\Shaman King\Shaman King ~ The Super Star' 'F:\Library\Graphic Novels\Manga\Boku No Hero Academia\Vigilante ~ Boku No Hero Academia Illegals' 'F:\Library\Graphic Novels\Manga\Kaiju No. 8' ) foreach ($dir in $dirs2Monitor){ set-location $dir $directoryFiles = Get-ChildItem -File $lastFile = SortNaturally -strArray $directoryFiles.Name | Select-Object -last 1 #Get the last file $mangaName = $lastFile.Split(' - ') $mangaIssue = $mangaName[1].split('.') Write-Color 'The newest issue of ', $mangaName[0], ' is ', $mangaIssue[0] -Color White, Yellow, White, Blue } Write-Separator } function routine{ fix2.ps1 3 'F:\Library\Graphic Novels\Comic' compress removeEmptyDirectory Move-Directories foreach ($Location in $Locations){ set-location $Location cleanNames set-location $Location decimals set-location $Location pad set-location $Location removeEmptyDirectory } set-location $rootDirectory Get-ChildItem -Recurse -File '*zip' | Rename-Item -NewName {[System.IO.Path]::ChangeExtension($_.Name, "cbz")} #Rename every zipped file into cbz foreach ($Location in $Locations){ set-location $Location missingFiles } set-location } Write-Color '1) ', 'Variable task' -Color White, Yellow Write-Color '2) ', 'Remove empty directories' -Color White, Yellow Write-Color '3) ', 'Decompress' -Color White, Yellow Write-Color '4) ', 'Compress' -Color White, Yellow Write-Color '5) ', 'Fix filenames' -Color White, Yellow Write-Color '6) ', 'Find missing issues' -Color White, Yellow Write-Color '7) ', 'Routine' -Color White, Yellow Write-Color '8) ', 'Print the newest manga for special list' -Color White, Yellow Write-Color '9) ', 'Directory Tree' -Color White, Yellow Write-Separator $selection = Read-Host Write-Separator switch ($selection) { '1' {findCrossovers} '2' {removeEmptyDirectory} '3' {decompress} '4' {compress} '5' { OnePiece set-location $rootDirectory decimals set-location $rootDirectory cleanNames set-location $rootDirectory cleanNames set-location $rootDirectory pad } '6' {missingFiles} '7' {routine} '8'{newest} '9'{DirectoryTree} }