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:
parent
d1e24fa7eb
commit
449a297d8b
7 changed files with 276 additions and 19 deletions
15
base/ConvertFrom-TimeSpan.ps1
Normal file
15
base/ConvertFrom-TimeSpan.ps1
Normal 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();
|
|
@ -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
61
base/Show-Progress.ps1
Normal 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
|
||||
}
|
4
base/profile.d/PathProcessingFunctions.ps1.ps1
Normal file
4
base/profile.d/PathProcessingFunctions.ps1.ps1
Normal file
|
@ -0,0 +1,4 @@
|
|||
function Get-ShellSafePath { param([string]$LiteralPath)
|
||||
"`"$([Management.Automation.WildcardPattern]::Escape($LiteralPath))`""
|
||||
}
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue