สร้างไฟล์หากไม่มีอยู่ใน PowerShell [4 วิธี]
การใช้คำสั่ง if-else
เราสามารถใช้คำสั่ง if-else เพื่อสร้างไฟล์ได้ดังนี้:
ใช้ รายการใหม่ Cmdlet
หากต้องการสร้างไฟล์หากไม่มีอยู่ใน PowerShell:
- ใช้
Test-Pathcmdlet โดยมีเงื่อนไขifเพื่อตรวจสอบว่ามีไฟล์อยู่หรือไม่ - ใช้ cmdlet
New-Itemเพื่อสร้างไฟล์ใหม่หากไม่มีอยู่ - พิมพ์ข้อความแสดงข้อผิดพลาดในเงื่อนไข
else
ใช้คำสั่ง if:
$file = "D:\test.txt"
if(!(Test-Path -Path $file)){
New-Item -ItemType File -Path $file
Write-Output "File '$file' created successfully"
} else {
Write-Output "File '$file' already exists"
}เอาท์พุท :
Directory: D:\
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 1/16/2023 4:19 PM 0 test.txt
File 'D:\test.txt' created successfully
Test-Path cmdlet ใน PowerShell ตรวจสอบว่ามีไฟล์หรือโฟลเดอร์อยู่ในระบบไฟล์หรือไม่ cmdlet ส่งกลับค่าบูลีนโดยขึ้นอยู่กับว่ามีไฟล์ที่ต้องการอยู่หรือไม่ ไวยากรณ์พื้นฐานของ cmdlet นี้คือ Test-Path -Path โดยที่พารามิเตอร์ -Path ระบุเส้นทางไปยังไฟล์หรือโฟลเดอร์ที่เราต้องการตรวจสอบ อาจเป็นเส้นทางสัมพัทธ์หรือเส้นทางที่แน่นอนก็ได้
Test-Path cmdlet สามารถรวมกับ cmdlet อื่นๆ เช่นคำสั่ง if เพื่อดำเนินการตามเงื่อนไขกับไฟล์หรือโฟลเดอร์ นอกจากนี้ยังสามารถใช้เพื่อตรวจสอบว่ามีไฟล์อยู่หรือไม่ ตัวอย่างเช่น เราใช้มันร่วมกับคำสั่ง if เพื่อตรวจสอบว่ามี file อยู่ในระบบหรือไม่
หากไม่มีไฟล์อยู่ เราจะใช้ cmdlet New-Item cmdlet รายการใหม่สร้างไฟล์ ไดเรกทอรี ลิงก์สัญลักษณ์ ทางแยก ฮาร์ดลิงก์ คีย์รีจิสทรี และตัวแปรใหม่ในระบบไฟล์หรือรีจิสทรี cmdlet เก็บ -Path และ -ItemType เป็นพารามิเตอร์ ตัวอย่างเช่น เราสร้างไฟล์ใหม่โดยใช้ cmdlet นี้
ในคำสั่ง else หากไฟล์มีอยู่แล้ว โปรแกรมจะแสดงข้อความแสดงข้อผิดพลาดบนคอนโซล:
เอาท์พุท :
File 'D:\test.txt' already existsใช้ Out-File Cmdlet
หากต้องการสร้างไฟล์หากไม่มีอยู่ใน PowerShell ให้แทนที่ cmdlet New-Item ของโค้ดที่กล่าวถึงข้างต้นด้วย cmdlet Out-Fileแข็งแกร่ง>
ใช้คำสั่ง if:
$file = "D:\test.txt"
if(!(Test-Path -Path $file)) {
Out-File -FilePath $file
Write-Output "File '$file' created successfully"
} else {
Write-Output "File '$file' already exists"
}เอาท์พุท :
File 'D:\test.txt' created successfullyเราได้พูดคุยถึง Test-Path cmdlet ในขณะที่อธิบายส่วนโค้ดสำหรับการใช้ New-Item cmdlet ในส่วนนี้ เราใช้ Out-File cmdlet ของ PowerShell
Out-File cmdlet จะส่งเอาต์พุตจากคำสั่งไปยังไฟล์ โดยจะเปลี่ยนเส้นทางเอาต์พุตของคำสั่งหรือสคริปต์ไปยังไฟล์แทนที่จะแสดงบนหน้าจอ โดยจะสร้างหรือเขียนทับไฟล์ที่ระบุและเขียนเอาต์พุตลงในไฟล์ แต่ในการจัดการกับการเขียนทับ เราสามารถใช้ Test-Path cmdlet ที่ตรวจสอบว่ามีไฟล์อยู่หรือไม่
ตัวอย่างเช่น เราใช้ Out-File cmdlet เพื่อสร้างไฟล์ที่มี file เป็น -Path
แทนที่ Cmdlet Test-Path
เราสามารถแทนที่ Test-Path cmdlet ภายในคำสั่ง if ด้วยสิ่งเหล่านี้เพื่อตรวจสอบว่ามีไฟล์อยู่หรือไม่:
- Get-Item cmdlet ดึงข้อมูลเกี่ยวกับรายการในระบบไฟล์ เช่น ไฟล์หรือไดเร็กทอรี
- Get-ChildItem cmdlet ใน PowerShell ดึงข้อมูลเกี่ยวกับไฟล์และไดเรกทอรีย่อยในไดเรกทอรี
- Get-ItemProperty cmdlet รับคุณสมบัติของไฟล์ ไดเรกทอรี หรือรายการอื่นๆ ขึ้นอยู่กับประเภทรายการและผู้ให้บริการที่เข้าถึงรายการ
[System.IO.File]::Exists()เป็นวิธีการของคลาสSystem.IO.Fileใน PowerShell ที่ตรวจสอบว่ามีไฟล์อยู่ในเส้นทางที่ระบุหรือไม่dircmdlet เป็นนามแฝงของGet-ChildItemcmdlet
โปรดทราบว่า cmdlet เหล่านี้ทั้งหมดต้องใช้พารามิเตอร์ -ErrorAction ที่มีค่า Ignore เพื่อกำจัดข้อผิดพลาดทั้งหมด
การใช้คำสั่ง try-catch
เราสามารถแทนที่คำสั่ง if-else ของส่วนโค้ดที่กล่าวถึงข้างต้นด้วยบล็อก try-catch เพื่อสร้างไฟล์ดังต่อไปนี้:
ใช้ รายการใหม่ Cmdlet
หากต้องการสร้างไฟล์หากไม่มีอยู่ใน PowerShell:
- ใช้คำสั่ง
tryเพื่อส่งข้อผิดพลาดหากมีไฟล์อยู่แล้ว - ใช้ cmdlet
New-Itemเพื่อสร้างไฟล์ใหม่ในบล็อกtry - ใช้คำสั่ง
catchเพื่อจัดการกับข้อผิดพลาดที่เกิดจากการพิมพ์ข้อความแสดงข้อผิดพลาด
ใช้คำสั่ง try-catch:
$file = "D:\test.txt"
Try {
New-Item -ItemType File -Path $file -ErrorAction Stop
Write-Output "File created successfully"
} Catch [System.IO.IOException]{
Write-Host "Error: $($_.Exception.Message)"
}เอาท์พุท :
Directory: D:\
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 1/16/2023 4:31 PM 0 test.txt
File created successfullyใน PowerShell คำสั่ง try-catch จะจัดการกับข้อผิดพลาดที่อาจเกิดขึ้นในสคริปต์
- บล็อก
tryมีโค้ดที่อาจทำให้เกิดข้อยกเว้น - บล็อก
catchมีโค้ดที่จะจัดการกับข้อยกเว้นหากมีปรากฏขึ้น
หากมีข้อยกเว้นปรากฏในบล็อก try ข้อผิดพลาดดังกล่าวจะถูกส่งไปยังบล็อก catch ซึ่งสามารถบันทึก แสดง หรือจัดการข้อยกเว้นได้ catch block ยังสามารถระบุการดำเนินการที่แตกต่างกันสำหรับข้อยกเว้นประเภทต่างๆ และสามารถแสดงข้อความแสดงข้อผิดพลาดได้ ช่วยให้สคริปต์ทำงานต่อไปได้แม้ว่าจะมีข้อผิดพลาดเกิดขึ้น แทนที่จะหยุดการดำเนินการ
ตัวอย่างเช่น เราใช้คำสั่ง try-catch เพื่อสร้างไฟล์ บล็อก try ประกอบด้วย cmdlet New-Item เพื่อสร้างไฟล์ใหม่ที่เส้นทางที่ระบุ คำสั่งสร้างไฟล์สำเร็จหากไม่มีอยู่ catch block จะถูกดำเนินการหากมีข้อยกเว้นเกิดขึ้น เช่น หากไฟล์นั้นมีอยู่แล้ว มันส่ง System.IO.IOException และแสดงข้อความแสดงข้อผิดพลาด:
เอาท์พุท :
Error: The file 'D:\test.txt' already exists.ใช้ Out-File Cmdlet
หากต้องการสร้างไฟล์หากไม่มีอยู่ใน PowerShell ให้แทนที่ cmdlet New-Item ของโค้ดที่กล่าวถึงข้างต้นซึ่งอยู่ในบล็อก try ด้วย Out-File cmdlet
ใช้คำสั่ง try-catch:
$file = "D:\test.txt"
Try {
Out-File -FilePath $file -NoClobber -ErrorAction Stop
Write-Output "File created successfully"
} Catch [System.IO.IOException]{
Write-Host "Error: $($_.Exception.Message)"
}เอาท์พุท :
File created successfullyสวิตช์ -NoClobber ใน cmdlet Out-File ป้องกันไม่ให้เขียนทับไฟล์ที่มีอยู่ เมื่อสวิตช์ -NoClobber ปรากฏขึ้น หากมีไฟล์อยู่แล้วในเส้นทางไฟล์ที่ระบุ Out-File จะไม่สร้างหรือเขียนทับไฟล์และจะส่งกลับข้อผิดพลาดแทน สวิตช์นี้ช่วยเมื่อเราต้องการให้แน่ใจว่าเราไม่ได้เขียนทับไฟล์สำคัญโดยไม่ได้ตั้งใจ
ตัวอย่างเช่น เราใช้สวิตช์ -NoClobber ใน cmdlet Out-File แทนคำสั่ง if-else ขนาดใหญ่เพื่อสร้างไฟล์หากเป็นเช่นนั้น ไม่มีอยู่จริง
การใช้ One-Liners
หากต้องการสร้างไฟล์หากไม่มีอยู่ ให้ใช้หนึ่งบรรทัดดังนี้:
- ใช้
Test-Pathหรือ cmdlet อื่นๆ เพื่อตรวจสอบว่ามีไฟล์อยู่หรือไม่ หากเป็นเช่นนั้น ก็จะส่งคืนtrue - ใช้ตัวดำเนินการเชิงตรรกะ
-eqเพื่อตรวจสอบว่าคำสั่งที่กล่าวถึงข้างต้นส่งคืนfalseหรือไม่ หากเป็นเช่นนั้น ให้ใช้Out-FileหรือNew-Itemcmdlet เพื่อสร้างไฟล์
ใช้ One-Liners:
$file = "D:\test.txt"
(Test-Path -Path $file) -eq $false | New-Item -ItemType File -Path $file -ErrorAction SilentlyContinueเอาท์พุท :
Directory: D:\
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 1/16/2023 4:48 PM 4 test.txtเราสามารถแทนที่ Test-Path cmdlet ด้วย Get-Item หรือ cmdlet อื่นๆ ที่เราพูดคุยกันในขณะที่อธิบายส่วนโค้ดสำหรับการใช้คำสั่ง if-else . นอกจากนี้ cmdlet Out-File สามารถแทนที่ cmdlet New-Item ได้ จุดสนใจหลักของส่วนนี้คือการเขียนสคริปต์บรรทัดเดียวที่สามารถสร้างไฟล์ได้หากไม่มีอยู่
ใน PowerShell -eq เป็นตัวดำเนินการเชิงตรรกะที่เปรียบเทียบค่าสองค่าเพื่อความเท่าเทียมกัน จะส่งกลับ $True หากค่าเท่ากัน และจะส่งกลับ $False หากไม่เท่ากัน
ตัวอย่างเช่น เราตรวจสอบว่าผลลัพธ์ของ cmdlet Test-Path เท่ากับค่า False หรือไม่ หากมีไฟล์อยู่แล้ว Test-Path cmdlet จะส่งกลับ True และการเปรียบเทียบจะส่งกลับค่า False แต่ถ้าไม่มีไฟล์อยู่ Test-Path cmdlet ส่งคืน False และการเปรียบเทียบส่งคืน True
หากไม่มีไฟล์อยู่ สคริปต์จะสร้างไฟล์โดยใช้ New-Item cmdlet อย่างไรก็ตาม สวิตช์ -ErrorAction SilentlyContinue ป้องกันไม่ให้ cmdlet New-Item ส่งข้อยกเว้นหากมีไฟล์อยู่แล้ว ด้วยเหตุนี้ บรรทัดคำสั่งจะไม่แสดงเอาต์พุตหากมีไฟล์อยู่แล้ว
