PowerShellでファイル名に文字列を追加するスクリプト

powershell7 コンピュータ
powershell7

ファイル名: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
            }
        }
    }
}

コメント