[APORTE] [PowerShell] RAR.exe | Test RAR Files

Páginas: (1/1)

Eleкtro:

El siguiente script, desarrollado en PowerShell y dependiente del programa de terceros WinRAR (rar.exe), sirve para analizar la integridad de los archivos RAR que haya en el directorio donde se ejecute el script.







El script genera un archivo con nombre "RAR_Test_Files.log" en el directorio de trabajo, donde se registran los nombres de archivos de los tests fallidos. En este ejemplo:

RAR_Test_Files.log
Citar
--
Código:
--
Failed test with exit code 3: C:\Nueva carpeta\Stupid Invaders (Spanish) (Disc 1)_128mb.rar
--

--


Test RAR Files.ps1
Código
--
<#
--
===========================================================================================
--
|                                                                                         |
--
|                                        Variables                                        |
--
|                                                                                         |
--
===========================================================================================
--
#>
--
 
--
$rarExecutablePath = "${env:ProgramFiles}\WinRAR\rar.exe"
--
$recursiveSearch   = $true
--
$logErrorFilePath  = "$PSScriptRoot\RAR_Test_Files.log"
--
 
--
<#
--
===========================================================================================
--
|                                                                                         |
--
|                                    Functions                                            |
--
|                                                                                         |
--
===========================================================================================
--
#>
--
 
--
function Show-WelcomeScreen {
--
   Clear-Host
--
   Write-Host ""
--
   Write-Host " $($host.ui.RawUI.WindowTitle)"
--
   Write-Host " +===================================================+"
--
   Write-Host " |                                                   |"
--
   Write-Host " | This script will use RAR.exe to test each file in |"
--
   Write-Host " | the current working directory, and inform about   |"
--
   Write-Host " | any errors found during the test.                 |"
--
   Write-Host " |                                                   |"
--
   Write-Host " +===================================================+"
--
   Write-Host ""
--
   Write-Host " Script Settings            " -ForegroundColor DarkGray
--
   Write-Host " ===========================" -ForegroundColor DarkGray
--
   Write-Host " RAR Executable Path: $([System.IO.Path]::GetFullPath($rarExecutablePath))" -ForegroundColor DarkGray
--
   Write-Host " Recursive Search...: $recursiveSearch" -ForegroundColor DarkGray
--
   Write-Host ""
--
}
--
 
--
function Confirm-Continue {
--
   Write-Host " Press 'Y' key to continue or 'N' to exit."
--
   Write-Host ""
--
   Write-Host " -Continue? (Y/N)"
--
   do {
--
       $key = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
--
       $char = $key.Character.ToString().ToUpper()
--
       if ($char -ne "Y" -and $char -ne "N") {
--
           [console]::beep(1500, 500)
--
       }
--
   } while ($char -ne "Y" -and $char -ne "N")
--
   if ($char -eq "N") {Exit(1)} else {Clear-Host}
--
}
--
 
--
function Test-RarFiles {
--
   Write-Host "Fetching RAR files, please wait..." -ForegroundColor DarkGray
--
   Write-Host ""
--
 
--
   $rarFiles = $null
--
   if ($recursiveSearch) {
--
       $rarFiles = Get-ChildItem -LiteralPath "$PSScriptRoot" -Filter "*.rar" -Recurse -File
--
   } else {
--
       $rarFiles = Get-ChildItem -LiteralPath "$PSScriptRoot" -Filter "*.rar" -File
--
   }
--
 
--
   $rarFileCount = $rarFiles.Count
--
   $currentFileCount = 0
--
 
--
   If ($rarFileCount -eq 0) {return}
--
 
--
   $testSuccessCount = 0
--
   $testFailCount = 0
--
 
--
   $logStream = [System.IO.StreamWriter]::new($logErrorFilePath, $false)
--
   foreach ($rarFile in $rarFiles) {
--
       $currentFileCount +=1
--
       Write-Host "RAR File $currentFileCount of $($rarFileCount):" -ForegroundColor DarkGray
--
 
--
       $psi = New-Object System.Diagnostics.ProcessStartInfo
--
       $psi.FileName = $rarExecutablePath
--
       $psi.Arguments = "t -idcdn `"$($rarFile.FullName)`""
--
       $psi.RedirectStandardOutput = $false
--
       $psi.UseShellExecute = $false
--
       $psi.CreateNoWindow = $false
--
 
--
       $process = [System.Diagnostics.Process]::Start($psi)
--
       $process.WaitForExit()
--
       $exitCode = $process.ExitCode
--
 
--
       if ($exitCode -eq 0) {
--
           Write-Host "RAR process exited with code: $exitCode" -ForegroundColor Green
--
           $testSuccessCount +=1
--
       } else {
--
           Write-Warning "RAR process exited with code: $exitCode"
--
           $logStream.WriteLine("Failed test with exit code $($exitCode): $($rarFile.FullName)")
--
           $testFailCount +=1
--
       }
--
       Write-Host ""
--
   }
--
   $logStream.Close()
--
 
--
   $SuccessPercent = [string]::Format("{0:F0}", ($testSuccessCount / $currentFileCount) * 100)
--
   if ($testSuccessCount -eq $currentFileCount) {
--
       Write-Host "RAR Tests Successful: $testSuccessCount of $currentFileCount ($SuccessPercent%)" -BackgroundColor Black -ForegroundColor Green
--
   } else {
--
       Write-Warning "RAR Tests Successful: $testSuccessCount of $currentFileCount ($SuccessPercent%)"
--
   }
--
 
--
   $FailPercent = [string]::Format("{0:F0}", ($testFailCount / $currentFileCount) * 100)
--
   if ($testFailCount -eq 0) {
--
       Write-Host "RAR Tests Failed....: $testFailCount of $currentFileCount ($FailPercent%)" -BackgroundColor Black -ForegroundColor Green
--
   } else {
--
       Write-Warning "RAR Tests Failed....: $testFailCount of $currentFileCount ($FailPercent%)"
--
   }
--
 
--
}
--
 
--
function Show-GoodbyeScreen {
--
   Write-Host ""
--
   Write-Host "Operation Completed!" -BackgroundColor Black -ForegroundColor Green
--
   Write-Host ""
--
   Write-Host "Press any key to exit..."
--
   $key = $Host.UI.RawUI.ReadKey("NoEcho, IncludeKeyDown")
--
   Exit(0)
--
}
--
 
--
<#
--
===========================================================================================
--
|                                                                                         |
--
|                                         Main                                            |
--
|                                                                                         |
--
===========================================================================================
--
#>
--
 
--
[System.Console]::Title = "Test RAR Files - by Elektro"
--
#[System.Console]::SetWindowSize(150, 45)
--
[CultureInfo]::CurrentUICulture = "en-US"
--
 
--
try { Set-ExecutionPolicy -ExecutionPolicy "Unrestricted" -Scope "Process" } catch { }
--
 
--
Show-WelcomeScreen
--
Confirm-Continue
--
Test-RarFiles
--
Show-GoodbyeScreen
--
 
--


Páginas: (1/1)