컴퓨터/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' }
- Get-ChildItem -Filter "*.pdf": 현재 디렉토리에서 확장자가 .pdf인 모든 파일을 가져옵니다.
- |: 이전 명령어의 결과를 다음 명령어로 전달합니다.
- 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' }