การเปลี่ยนชื่อ Folder และ File โดยใช้ PowerShell บน Windows

เคยไหม ต้องการเปลี่ยนชื่อ Folder และหรือ File เป็นชื่อที่ต้องการ ด้วยรูปแบบการเปลี่ยนชื่อเดียวกัน ซึ่งเรามีข้อมูลอยู่แล้วว่าจะเปลี่ยนจากชื่อเดิม เป็นชื่อใหม่อะไร โดยไม่ต้องมาเปลี่ยนทีละไฟล์ ลองมาดูวิธีนี้กัน

ตัวอย่าง

มี Folder ซึ่งเป็นรหัสของชื่อคน 0001 – 0005 ในแต่ละ Folder ก็จะมีการจัดเก็บเอกสารของแต่ละคนอยู่

ต้องการเปลี่ยนชื่อ Folder และ File เป็นชื่อคนนั้น ๆ ให้รู้ว่า Folder นี้เป็นเอกสารของใคร แทนตัวเลข

ขั้นตอนที่ 1 จะต้องสร้าง list ของ file เพื่อจับคู่ว่าจะเปลียนจากชื่ออะไร เป็นชื่ออะไร โดยใช้ Excel

  • คอลัมน A จะให้หัวตารางชื่อ FolderID : ใส่ชื่อ Folder ลงไป
  • คอลัมน์ B จะให้หัวตารางชื่อ NewName : ใส่ชื่อที่ต้องการเปลี่ยน
  • จากนั้น Save As File ตั้งชื่อ File ว่า change_file_name.csv *** ให้เลือกประเภท File เป็น CSV UTF-8 (Comma delimited) และ save ให้อยู่ใน Folder เดียวกันกับ Folder ที่กำลังทำงานอยู่
เลือก CSV UTF-8 (Comma delimited)
file CSV อยู่ใน folder เดียวกัน

ขั้นตอนที่ 2  รันคำสั่งเพื่อให้ทำการเปลี่ยนชื่อ File ในทุก ๆ Folder

  • ที่ Address bar ด้านบน พิมพ์ powershell จะปรากฎหน้าจอ Windows Powershell ที่เป็น Command line
  • รันคำสั่ง โดย copy code ไปใส่ใน powershell และกด Enter
  # 1. เข้าไปอ่าน file csv ที่ได้สร้างไว้
 Import-Csv -Path ".\change_file_name.csv" -Encoding UTF8 | ForEach-Object {
     
 # 2. สร้างตัวแปรเพื่อเก็บข้อมูล
     $subFolder  = $_.FolderID   # ข้อมูลจาก col ชื่อ FolderID
     $customName = $_.NewName    # ข้อมูลจาก col ชื่อ NewName
     $targetPath = ".\$subFolder" # ที่อยู่ของ Folder เดิม
     
 # 3. เปลี่ยนชื่อ file และ folder 
     if (Test-Path -Path $targetPath) {
         (Get-ChildItem -Path $targetPath -File) | ForEach-Object {
             $ext = $_.Extension #แยกนามสกุลของไฟล์
             # เงื่อนไขการตั้งชื่อไฟล์ใหม่ จะทำการ check เงื่อนไข และเปลี่ยนชื่อไฟล์เก็บไว้ในตัวแปร
             if ($_.BaseName -match "^[^_]+_(\d+)") {
                 $number = $Matches[1]
                 $newFileName = $customName + "_" + $number + $ext
             } else {
                 $newFileName = $customName + $ext
             }
             # ทำการเปลี่ยนชื่อไฟล์
             Rename-Item -Path $_.FullName -NewName $newFileName -ErrorAction SilentlyContinue
         } # <-- จบ Loop ของการเปลี่ยนชื่อไฟล์
         # ทำการเปลี่ยนชื่อ folder 
         Rename-Item -Path $targetPath -NewName $customName -ErrorAction SilentlyContinue
     }
 } 
สั่ง run powershell
  • จะได้ folder และ file ที่มีชื่อตามที่เรากำหนดไว้ใน file excel
ชื่อ folder
ชื่อ file ใน folder

หากต้องการเปลี่ยนชื่อไฟล์เป็นรูปแบบอื่น ๆ สามารถ เขียน script เพื่อ ให้เป็นรูปแบบตามที่ต้องการได้เพิ่มเติม

ผู้เขียน

มณฑลี ลิ้มกิจเจริญภรณ์
ฝ่ายระบบสารสนเทศ
สำนักคอมพิวเตอร์