ファイル名:RenameFile-Add.ps1
<#
.SYNOPSIS
ファイル名の末尾に文字列を追加
.EXAMPLE
ls | ./RenameFile-Add.ps1 -Value "[極秘]" -Prefix -WhaiIf
.INPUTS
FileInfo[]
.INPUTS
string[]
.OUTPUTS
なし
.PARAMETER TargetFile
対象ファイル
.PARAMETER Value
追加する文字列
.PARAMETER Prefix
先頭に文字列を追加する
.PARAMETER WhatIf
問い合わせ
.PARAMETER Help
ヘルプ
#>
param(
[string]
$TargetFile,
[string]
$Value = "[極秘]",
[switch]
$Prefix,
[switch]
$WhatIf,
[switch]
$Help
)
function MyRnameAdd {
param (
[string]
$srcFile
)
#Write-Host $srcFile
$parent = Split-Path $srcFile -Parent
$leaf = Split-Path $srcFile -Leaf
$base = Split-Path $srcFile -LeafBase
$ext = Split-Path $srcFile -Extension
$n = 0
$fileName = ""
if ($Prefix) {
$fileName = $Value + $base + $ext
} else {
$fileName = $base + $Value + $ext
}
while(Test-Path -LiteralPath (Join-Path $parent $fileName)) {
if ($Prefix) {
$fileName = ("{0}{1}_{2}{3}" -f $Value, $base, ++$n, $ext)
} else {
$fileName = ("{0}{1}_{2}{3}" -f $base, $Value, ++$n, $ext)
}
}
$destination = Join-Path $parent $fileName
if ($WhatIf) {
$in = Read-Host ("{0}を{1}へ変更しますか? y or n" -f $leaf, $fileName)
if ($in.ToLower() -ne "y") {
return
}
}
Move-Item -LiteralPath $srcFile -Destination $destination
}
$args = @($input)
if ($Help -Or ($args.Count -eq 0) -And ($TargetFile -eq "")) {
Get-Help $PSCommandPath
Exit 1
}
# 単一ファイル
if (Test-Path $TargetFile) {
MyRnameAdd $TargetFile
Exit 0
}
# パイプライン
if ($args.Count -gt 0) {
$args | ForEach-Object {
$f = $_
if ($f[0] -eq """") {
$s = 1
$e = $f.Length-2
$f = $f.Substring($s, $e)
Write-Host $f
}
$type = $_.GetType()
switch ($type.Name) {
'String' {
if (Test-Path $f) {
MyRnameAdd $f
}
}
'FileInfo' {
MyRnameAdd $f.FullName
}
}
}
}
コメント