컴퓨터/powershell

powershell 파일이름일괄바꾸기 숫자_사람이름_접미사.pdf

풍경소리^^ 2023. 11. 24. 17:13

https://www.youtube.com/watch?v=9tAkyTW1_Lo

# Loading assemblies
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing

function GetFolders{
    $Input = $InputBox.Text
    Set-Location $Input
    $result = $Input | Get-ChildItem -Directory | Out-String
    $outputBox.Text = $result
}

function GetAllFiles{
    $Input = $InputBox.Text
    Set-Location $Input
    $result = $Input | Get-ChildItem -Filter *.* | Out-String
    $outputBox.Text = $result
}

# Start to create form
$Form = New-Object System.Windows.Forms.Form
$Form.Text = "정용만 PowerShell"
$Form.Size = New-Object System.Drawing.Size(800,600)

# Add an Input box
$InputBox = New-Object System.Windows.Forms.TextBox
$InputBox.Location = New-Object System.Drawing.Size(20,50) # 위치
$InputBox.Size = New-Object System.Drawing.Size(300,20)

$Form.Controls.Add($InputBox)

# Add a label to input box
$Label = New-Object System.Windows.Forms.Label
$Label.Text = "찾을 폴더 위치"
$Label.Location = New-Object System.Drawing.Size(20,30)
$Label.BackColor = "Transparent"
$Label.AutoSize = $true

$Form.Controls.Add($Label)

# Create a outputbox
$OutputBox = New-Object System.Windows.Forms.TextBox
$OutputBox.Location = New-Object System.Drawing.Size(20,150)
$OutputBox.Size = New-Object System.Drawing.Size(600,400)
$OutputBox.Multiline =$true
$OutputBox.ScrollBars = "Vertical"

$Form.Controls.Add($OutputBox)

# Creating button
$Button = New-Object System.Windows.Forms.Button
$Button.Location = New-Object System.Drawing.Size(20,90)
$Button.Size = New-Object System.Drawing.Size(200,30)
$Button.Text = "폴더 보기"
$Button.Add_click({GetFolders})

$Form.Controls.Add($Button)

# Creating button
$Button1 = New-Object System.Windows.Forms.Button
$Button1.Location = New-Object System.Drawing.Size(250,90)
$Button1.Size = New-Object System.Drawing.Size(200,30)
$Button1.Text = "모두 보기"
$Button1.Add_click({GetAllFiles})
#$Button1.Add_click({Get-Service | Out-GridView})

$Form.Controls.Add($Button1)

$Form.ShowDialog()

 

파일이름 바꾸기

Get-ChildItem -Filter "*.pdf" | Rename-Item -NewName { $_.Name -replace '^(\d+)_([^_]+)_.+','$2.pdf' }
  1. Get-ChildItem -Filter "*.pdf": 현재 디렉토리에서 확장자가 .pdf인 모든 파일을 가져옵니다.
  2. |: 이전 명령어의 결과를 다음 명령어로 전달합니다.
  3. Rename-Item -NewName { $_.Name -replace '^(\d+)_([^_]+)_.+','$2.pdf' }:
    • Rename-Item: 파일 이름을 변경하는 cmdlet(명령어)입니다.
    • -NewName { ... }: 새로운 파일 이름을 설정하는데, 중괄호 안에 있는 명령어를 실행하여 새로운 파일 이름을 생성합니다.
    • $_: 현재 반복되고 있는 파일을 나타냅니다.
    • .Name: 파일의 이름을 나타냅니다.
    • -replace: 정규 표현식을 사용하여 문자열을 교체하는데 사용됩니다.
    • ^(\d+)_([^_]+)_.+: 정규 표현식으로, 파일 이름에서 숫자_이름_ 이 패턴과 일치하는 부분을 찾습니다.
      • ^: 문자열의 시작을 나타냅니다.
      • (\d+): 하나 이상의 숫자를 나타내는 그룹입니다.
      • _: 언더스코어를 나타냅니다.
      • ([^_]+): 언더스코어가 아닌 문자들의 연속을 나타내는 그룹입니다.
      • _.+: 나머지 문자들을 나타냅니다.
    • '$2.pdf': 정규 표현식에서 첫 번째 그룹과 두 번째 그룹에 해당하는 부분을 가져와서 새로운 파일 이름을 만듭니다. 여기서 $2는 두 번째 그룹을 나타내며, 파일의 이름 부분이 됩니다. 그리고 이어지는 .pdf로 확장자를 붙입니다.

이렇게 하면 해당 PowerShell 명령어는 주어진 파일 이름에서 숫자와 언더스코어(_) 부분을 제거하여 파일 이름을 변경합니다.

 

언더바 까지 지우기

Get-ChildItem -Filter "*_*.pdf" | Rename-Item -NewName { $_.Name -replace '.*_(.+)\.pdf','$1.pdf' }