ไฟล์ 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 เพื่อวนซ้ำไฟล์ในโฟลเดอร์
