Main ConvertTo-Zip with a few additions and fixes

+ ConvertTo-Zip, originally created to mass convert CBRs to CBZs
  It will only be avilable when 7-zip is available (7z executable)
  Features: Shows progress, can work recursively (preserving folder
  structure), knows to move completed files.
+ Show-Progress: Shorthand for common progress related output
  manipulation (calculation of completion based on time, or item count,
  and verbose output if needeed)
+ ConvertFrom-TimeSpan: string output from timespan, used by
  Show-Progress
+ Get-Path updated to be more efficient (no need for exception handling)
+ PathProcessingFunctions loads a utility function GetShellSafePath
* Repair-Permissions added some status reporting
This commit is contained in:
lksz 2021-01-29 18:26:39 -05:00
parent d1e24fa7eb
commit 449a297d8b
7 changed files with 276 additions and 19 deletions

View file

@ -0,0 +1,15 @@
param([TimeSpan]$TimeSpan, [switch]$NoSeconds)
$local:out = [string]::Empty
if( $TimeSpan.Days ) {
$out = "$($TimeSpan.Days)d "
}
if( $out -or $TimeSpan.Hours ) {
$out += "$($TimeSpan.Hours)h "
}
if( $out -or $TimeSpan.Minutes -or ($NoSeconds -and -not $out) ) {
$out += "$($TimeSpan.Minutes)m "
}
if( -not $NoSeconds -and ($TimeSpan.Seconds -or -not $out) ) {
$out += "$($TimeSpan.Seconds)s"
}
$out.Trim();

View file

@ -1,11 +1,28 @@
[CmdletBinding()]param([string]$Path)
try {
if( $Path[0] -eq '@' ) {
$Path = Join-Path $MyPSScriptRoot $Path.Substring(1)
function Get-FullPath {
param([string]$Path)
if([System.IO.Path]::IsPathRooted($Path)){
[System.IO.Path]::GetFullPath($Path)
}else{
[System.IO.Path]::GetFullPath((Join-Path $PWD $Path))
}
get-item $Path -Force -ErrorAction Stop |
Select-Object -ExpandProperty FullName
} catch {
$_.targetObject
}
if( $Path[0] -eq '@' ) {
$Path = Join-Path $MyPSScriptRoot $Path.Substring(1)
}
if([System.IO.Path]::IsPathRooted($Path)){
[System.IO.Path]::GetFullPath($Path)
}else{
[System.IO.Path]::GetFullPath((Join-Path $PWD $Path))
}
# try {
# get-item $Path -Force -ErrorAction Stop |
# Select-Object -ExpandProperty FullName
# } catch {
# $_.targetObject
# }

61
base/Show-Progress.ps1 Normal file
View file

@ -0,0 +1,61 @@
[CmdletBinding()]param(
[Parameter(Mandatory, Position=0)]
[string]$Activity,
[string]$Status,
[Parameter(ParameterSetName="Calculate",Mandatory)]
[int]$ItemProgress,
[Parameter(ParameterSetName="Calculate")]
[int]$ItemCount,
[Parameter(ParameterSetName="PercentComplete",Mandatory)]
[int]$PercentComplete,
[Parameter(ParameterSetName="SecondsRemaining",Mandatory)]
[int]$SecondsRemaining,
[Parameter(ParameterSetName="Elapsed",Mandatory)]
[Parameter(ParameterSetName="Calculate")]
[Timespan]$Elapsed,
[Parameter(ParameterSetName="Elapsed")]
[int]$TotalSeconds,
[string]$CurrentOperation,
[Parameter(ParameterSetName="Completed",Mandatory)]
[switch]$Completed
)
$local:progressParams = [ordered]@{
Activity = $Activity
}
if( $Status ) { $progressParams.Status = $Status }
if( $PercentComplete ) { $progressParams.PercentComplete = $PercentComplete }
if( $SecondsRemaining ) { $progressParams.SecondsRemaining = $SecondsRemaining }
if( $ItemCount ) { $progressParams.PercentComplete = (100.0 * $ItemProgress / $ItemCount) }
if( $CurrentOperation ) { $progressParams.CurrentOperation = $CurrentOperation }
if( $Completed ) { $progressParams.Completed = $true }
if( $Elapsed ) {
if( -not $Status ) {
$progressParams.Status = "Running for $(ConvertFrom-TimeSpan $Elapsed)"
}
if( $TotalSeconds ) {
$progressParams.PercentComplete = [Math]::Floor($(1000 * (($Elapsed.TotalSeconds * 1.0) / ($TotalSeconds * 1.0)))/10.0)
}
}
If( $ItemProgress ) {
if( $progressParams.Status ) { $progressParams.Status = " " + $progressParams.Status }
$progressParams.Status = "#$ItemProgress$(if($ItemCount){" out of $ItemCount"})" + $progressParams.Status
}
$local:VerboseProgress = $("$([datetime]::Now.TimeOfDay.ToString("hh\:mm\:ss")) Progress: $($progressParams.Activity)" +
"$(if($progressParams.Status){" ($($progressParams.Status))"})" +
"$(if($ItemProgress) {" #$ItemProgress$(if($ItemCount){" out of $ItemCount"})"})" +
"$(if($progressParams.PercentComplete){" %$($progressParams.PercentComplete)"})" +
"$(if($progressParams.Completed){if(-not $progressParams.Status){" Done."}} else {"..."})"
)
Write-Verbose $VerboseProgress
if( Test-Path variable:global:psISE ) {
if( -not $VerbosePreference -eq 'Continue' ) {
Write-Host -ForegroundColor Cyan $VerboseProgress
}
} else {
Write-Progress @progressParams
}

View file

@ -0,0 +1,4 @@
function Get-ShellSafePath { param([string]$LiteralPath)
"`"$([Management.Automation.WildcardPattern]::Escape($LiteralPath))`""
}