ค้นหาเว็บไซต์

ไฟล์ PowerShell Foreach ในโฟลเดอร์


คุณต้องการวนซ้ำไฟล์ในโฟลเดอร์โดยใช้ PowerShell หรือไม่? ในบทช่วยสอน PowerShell นี้ ฉันจะอธิบายทุกอย่างเกี่ยวกับไฟล์ PowerShell Foreach ในโฟลเดอร์

หากต้องการวนซ้ำแต่ละไฟล์ในโฟลเดอร์โดยใช้ PowerShell คุณสามารถใช้ Get-ChildItem cmdlet เพื่อดึงข้อมูลไฟล์ จากนั้นวนซ้ำไฟล์เหล่านั้นด้วยคำสั่ง foreach นี่เป็นตัวอย่างโดยย่อ:

$files = Get-ChildItem -Path "C:\MyFolder"
foreach ($file in $files) {
    # Your code to process each file
}

สคริปต์นี้จะวนซ้ำแต่ละไฟล์ใน “C:\MyFolder” ช่วยให้คุณสามารถดำเนินการตามต้องการกับแต่ละไฟล์ภายในวนซ้ำได้

ไฟล์ PowerShell Foreach ในโฟลเดอร์

คำสั่ง foreach ใน PowerShell ใช้เพื่อดำเนินการชุดคำสั่งสำหรับแต่ละรายการในคอลเลกชัน ในบริบทของไฟล์ คอลเล็กชันจะเป็นรายการไฟล์ที่คุณดึงข้อมูลโดยใช้ cmdlet Get-ChildItem

วนซ้ำไฟล์ในโฟลเดอร์โดยใช้ Foreach Loop พื้นฐาน

นี่คือตัวอย่างง่ายๆ โดยใช้ foreach เพื่อวนซ้ำแต่ละไฟล์ในไดเร็กทอรี:

$files = Get-ChildItem -Path "C:\MyFolder"
foreach ($file in $files) {
    # Perform actions on each file
    Write-Output $file.FullName
}

ในสคริปต์นี้ Get-ChildItem จะดึงข้อมูลรายการทั้งหมดใน “C:\MyFolder” และ foreach วนซ้ำแต่ละรายการ โดยแสดงชื่อเต็มของรายการ

คุณสามารถดูผลลัพธ์ได้ในภาพหน้าจอด้านล่าง:

วนซ้ำไฟล์ต่างๆ ซ้ำๆ

หากต้องการรวมไดเร็กทอรีย่อยในการค้นหาและประมวลผลไฟล์ภายในไดเร็กทอรีเหล่านั้น ให้ใช้พารามิเตอร์ -Recurse:

$files = Get-ChildItem -Path "C:\MyFolder" -Recurse
foreach ($file in $files) {
    # Perform actions on each file
    Write-Output $file.FullName
}

นี่จะแสดงรายการไฟล์ทั้งหมดใน “C:\MyFolder” และโฟลเดอร์ย่อย

การกรองประเภทไฟล์เฉพาะ

หากคุณสนใจเฉพาะไฟล์บางประเภท ให้ใช้พารามิเตอร์ -Filter เพื่อจำกัดผลลัพธ์ให้แคบลง:

$files = Get-ChildItem -Path "C:\MyFolder" -Filter "*.txt"
foreach ($file in $files) {
    # Perform actions on each .txt file
    Write-Output $file.FullName
}

ตัวอย่างนี้จะประมวลผลเฉพาะไฟล์ .txt ใน “C:\MyFolder”

การใช้ไปป์ไลน์กับ Foreach-Object

อีกทางเลือกหนึ่งสำหรับคำสั่ง foreach คือ Foreach-Object cmdlet ซึ่งสามารถใช้ร่วมกับไปป์ไลน์ได้:

Get-ChildItem -Path "C:\MyFolder" | Foreach-Object {
    # Perform actions on each file
    Write-Output $_.FullName
}

ในที่นี้ $_ แสดงถึงออบเจ็กต์ปัจจุบันในไปป์ไลน์ ซึ่งเป็นแต่ละไฟล์ที่ส่งผ่านมาจาก Get-ChildItem

ไฟล์ PowerShell Foreach ในโฟลเดอร์ - ตัวอย่าง

ตอนนี้ เรามาดูตัวอย่างเล็กๆ น้อยๆ ของสิ่งที่คุณสามารถทำได้โดยการวนซ้ำไฟล์ต่างๆ โดยใช้ลูป foreach

การเปลี่ยนชื่อไฟล์

หากต้องการเปลี่ยนชื่อไฟล์ในไดเร็กทอรี คุณสามารถใช้ Rename-Item cmdlet ภายในลูปของคุณ:

$files = Get-ChildItem -Path "C:\MyFolder" -Filter "*.log"
foreach ($file in $files) {
    $newName = "Processed_" + $file.Name
    Rename-Item $file.FullName -NewName $newName
}

สคริปต์นี้เติม “Processed_” นำหน้าชื่อไฟล์ .log แต่ละไฟล์

การย้ายไฟล์

การย้ายไฟล์ไปยังไดเรกทอรีใหม่สามารถทำได้ด้วย Move-Item cmdlet:

$files = Get-ChildItem -Path "C:\MyFolder" -Filter "*.docx"
foreach ($file in $files) {
    $destinationPath = "C:\ProcessedFiles\" + $file.Name
    Move-Item $file.FullName -Destination $destinationPath
}

ไฟล์ .docx แต่ละไฟล์จาก “C:\MyFolder” จะถูกย้ายไปยัง “C:\ProcessedFiles”

การแก้ไขเนื้อหาไฟล์

หากต้องการแก้ไขเนื้อหาของแต่ละไฟล์ คุณอาจใช้ Get-Content และ Set-Content:

$files = Get-ChildItem -Path "C:\MyFolder" -Filter "*.config"
foreach ($file in $files) {
    $content = Get-Content $file.FullName
    $newContent = $content -replace "oldvalue", "newvalue"
    Set-Content -Path $file.FullName -Value $newContent
}

สคริปต์นี้จะแทนที่ "oldvalue" ด้วย "newvalue" ในเนื้อหาแต่ละไฟล์ .config

การจัดการข้อผิดพลาดใน PowerShell ForEach Loop

เมื่อทำให้การประมวลผลไฟล์เป็นอัตโนมัติ จำเป็นต้องรวมการจัดการข้อผิดพลาดเพื่อจัดการกับปัญหาที่ไม่คาดคิดด้วย ต่อไปนี้คือวิธีที่คุณสามารถรวมการจัดการข้อผิดพลาดพื้นฐานไว้ในลูป foreach ของคุณ:

$files = Get-ChildItem -Path "C:\MyFolder" -ErrorAction SilentlyContinue
foreach ($file in $files) {
    try {
        # Try to perform actions on each file
        Write-Output $file.FullName
    } catch {
        Write-Error "An error occurred processing file: $($file.FullName)"
    }
}

พารามิเตอร์ -ErrorAction SilentlyContinue บอกให้ Get-ChildItem ละเว้นข้อผิดพลาดที่ไม่ยุติ ในขณะที่บล็อก try/catch จัดการกับข้อผิดพลาดในการยุติระหว่างการประมวลผล

บทสรุป

ไม่ว่าคุณจะเปลี่ยนชื่อ ย้าย หรือแก้ไขไฟล์ ลูป PowerShell foreach พร้อมด้วย cmdlets เช่น Get-ChildItem, Rename-Item, Move-Item และ Set-Content พร้อมใช้งาน

ในบทช่วยสอน PowerShell นี้ ฉันได้อธิบายวิธีใช้ foreach loop เพื่อวนซ้ำไฟล์ในโฟลเดอร์

บทความที่เกี่ยวข้อง