PowerShell의 일련 이름 바꾸기
16374 단어 WindowsPowerShell
-execute
옵션 지정시만 리네임을 실행하도록 해 오조작에 대한 안전성을 높이고 있습니다.환경
Name Value
---- -----
PSVersion 7.0.3
PSEdition Core
GitCommitId 7.0.3
OS Microsoft Windows 10.0.18362
Platform Win32NT
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0…}
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
WSManStackVersion 3.0
동작 이미지
맨 위에 추가
맨 위에 추가 & 파일 이름 통합
끝에 추가
끝에 추가 & 파일 이름 통일
기타 옵션
그 외에도 파라미터로 다음을 지정할 수 있습니다.
코드
function Rename-Index {
<#
.SYNOPSIS
連番リネーム
.DESCRIPTION
パイプライン経由での入力にのみ対応(出力なし)
.PARAMETER basename
拡張子を覗いた部分のファイル/フォルダ名
.PARAMETER start
連番の開始番号
.PARAMETER pad
インデックスの桁数
.PARAMETER execute
指定した場合のみリネーム
.PARAMETER step
連番の増分
.PARAMETER tail
指定時はファイル名末尾に挿入
.EXAMPLE
ls * | Rename-Index
#>
param (
[string]$basename,
[int]$start = 1,
[int]$pad = 2,
[int]$step = 1,
[switch]$tail,
[switch]$execute
)
$proc = $input | Where-Object {$_.GetType().Name -in @("FileInfo", "DirectoryInfo")}
$shiftJIS = [System.Text.Encoding]::GetEncoding("Shift_JIS")
if ($basename) {
$longestName = $proc.Name | Sort-Object {$shiftJIS.GetByteCount($_)} -Descending | Select-Object -First 1
$fill = $shiftJIS.GetByteCount($longestName) + 1
}
$ANSI_BlackOnGreen = "`e[42m`e[30m"
$ANSI_BlackOnWhite = "`e[47m`e[30m"
$ANSI_Reset = "`e[0m"
$bgColor = ($execute)? $ANSI_BlackOnGreen : $ANSI_BlackOnWhite
$start -= $step
$proc | ForEach-Object {
$start += $step
$index = "{0:d$($pad)}" -f $start
$fileName = $_.Name
if ($basename) {
Write-Host $fileName -ForegroundColor DarkGray -NoNewline
$leftIndent = $shiftJIS.GetByteCount($fileName)
" {0}=> " -f ("=" * ($fill - $leftIndent)) | Write-Host -NoNewline
$nameParts = ($tail)?
@($basename, $index, $_.Extension):
@("", $index, ($basename + $_.Extension))
}
else {
$nameParts = ($tail)?
@($_.Basename, "_$($index)", $_.Extension):
@("", "$($index)_", $fileName)
}
"{0}$($bgColor){1}$($ANSI_Reset){2}" -f $nameParts | Write-Host
if (-not $execute) {
return
}
$renamedName = $nameParts -join ""
try {
$_ | Rename-Item -NewName $renamedName -ErrorAction Stop
}
catch {
Write-Host ("ERROR: failed to rename '{0}' to '{1}'!" -f $fileName, $renamedName) -ForegroundColor Magenta
(Test-Path $renamedName)?
"(same name exists in directory)":
"(other process may opening file)" | Write-Host -ForegroundColor Magenta
}
}
}
PowerShell 7에서 삼항 연산자와 이스케이프 시퀀스 `
e
Reference
이 문제에 관하여(PowerShell의 일련 이름 바꾸기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/AWtnb/items/2fe344fab33da6f59f0b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)