สร้างโฟลเดอร์หากไม่มี PowerShell
ก่อนที่คุณจะสร้างโฟลเดอร์ สิ่งสำคัญคือต้องตรวจสอบว่าไม่มีโฟลเดอร์นั้นอยู่แล้ว โดยเฉพาะอย่างยิ่งเมื่อคุณสร้างสคริปต์ที่จะทำงานโดยอัตโนมัติ หากคุณไม่ตรวจสอบว่ามีไดเรกทอรีอยู่หรือไม่ สคริปต์ของคุณอาจพบข้อผิดพลาด
ในบทความนี้ ฉันจะแสดงให้คุณเห็นว่าคุณสามารถสร้างโฟลเดอร์ใหม่ได้อย่างไรเฉพาะในกรณีที่ไม่มีอยู่
สร้างโฟลเดอร์หากไม่มีอยู่
ก่อนที่เราจะสร้างโฟลเดอร์ เราจะตรวจสอบก่อนว่ามีโฟลเดอร์อยู่หรือไม่ สำหรับสิ่งนี้ เราจะใช้ Test-Path cmdlet ซึ่งจะคืนค่า True หรือ False ขึ้นอยู่กับผลลัพธ์ หากผลลัพธ์เป็นเท็จ แสดงว่าเรารู้ว่าไม่มีไดเร็กทอรีนั้น และเราสามารถดำเนินการต่อด้วยการสร้างไดเร็กทอรีนั้นขึ้นมา
# Set the folder path
$path = "c:\temp\newfolder\structure\"
# Check if folder not exists, and create it
if (-not(Test-Path $path -PathType Container)) {
New-Item -path $path -ItemType Directory
}สิ่งสำคัญที่ควรทราบที่นี่คือ New-Item cmdlet สามารถสร้างโครงสร้างโฟลเดอร์ที่สมบูรณ์ได้ จากตัวอย่างข้างต้น มีเพียงโฟลเดอร์ c:\temp เท่านั้นที่มีอยู่ แต่ไม่มีโฟลเดอร์ย่อย newfolder และโฟลเดอร์สุดท้าย structure อย่างไรก็ตาม ทั้งสองจะถูกสร้างขึ้นโดยอัตโนมัติโดย New-Item cmdlet
นอกจากนี้ เรายังใช้ตัวดำเนินการ -Not ซึ่งคุณสามารถย่อให้สั้นลงได้โดยใช้ ! แทน เนื่องจากเราต้องการตรวจสอบว่าในกรณีนี้ไม่มีไดเร็กทอรีเท่านั้น
พารามิเตอร์ -PathType Container ทำให้แน่ใจว่าเราจะตรวจสอบเฉพาะไดเรกทอรีที่มีอยู่เท่านั้น สำหรับ New-Item cmdlet เรากำลังใช้พารามิเตอร์ -ItemType Directory ดังนั้นเราจึงมั่นใจว่ามีการสร้างโฟลเดอร์ ไม่ใช่ไฟล์
การใช้การจัดการข้อผิดพลาด
ด้วยการตรวจสอบ Test-Path เราพบปัญหาส่วนใหญ่แล้ว แต่ New-Item cmdlet ยังคงล้มเหลวเมื่อสร้างโฟลเดอร์ ตัวอย่างเช่น คุณอาจไม่มีสิทธิ์ในการเขียนในโฟลเดอร์หลัก ซึ่งทำให้คุณไม่สามารถสร้างโฟลเดอร์ได้จริงๆ
ดังนั้นวิธีที่ดีที่สุดในการสร้างโฟลเดอร์ใหม่เมื่อยังไม่มีคือการใช้บล็อก Try-Catch เช่นกัน วิธีนี้ช่วยให้คุณตรวจจับข้อผิดพลาดและจัดการได้อย่างถูกต้อง:
# Set the folder path
$path = "c:\temp\newfolder\structure\"
# Check if folder not exists, and create it
if (-not(Test-Path $path -PathType Container)) {
try {
New-Item -path $path -ItemType Directory -ErrorAction stop
}
catch {
Write-Host "Unable to create Folder" -ForegroundColor Red
Write-Host $_.Exception.Message -ForegroundColor Red
}
}ใช้เฉพาะสินค้าใหม่เท่านั้น
นอกจากนี้ยังสามารถสร้างโฟลเดอร์ใหม่ได้เมื่อไม่มีอยู่โดยใช้ New-Item cmdlet เท่านั้น เราสามารถใช้ตัวเลือก -Force ซึ่งจะระงับข้อผิดพลาดใดๆ หากมีไดเร็กทอรีอยู่แล้ว นอกจากนี้ยังจะส่งคืนวัตถุโฟลเดอร์เหมือนกับที่ cmdlet ทำเมื่อสร้างโฟลเดอร์จริง
หากมีโฟลเดอร์อยู่แล้ว เนื้อหาใดๆ ในโฟลเดอร์ (หรือโฟลเดอร์ย่อย) จะยังคงอยู่ ดังนั้นคุณจะไม่สูญเสียข้อมูลใด ๆ ด้วยวิธีนี้ ข้อดีเพียงอย่างเดียวของวิธีนี้คือสั้นกว่า และคุณสามารถใช้คำสั่งเดียวเพื่อสร้างและรับออบเจ็กต์โฟลเดอร์ได้ไม่ว่าจะมีอยู่หรือไม่ก็ตาม
# Set the folder path
$path = "c:\temp\newfolder\structure\"
# Create a folder whether is exists or not
New-Item -path $path -ItemType Directory -Forceตามค่าเริ่มต้น cmdlet รายการใหม่จะส่งกลับวัตถุโฟลเดอร์ที่สร้างขึ้น หากคุณไม่เก็บสิ่งนี้ไว้ในตัวแปร มันก็จะส่งออกไปยังคอนโซล คุณสามารถระงับสิ่งนี้ได้โดยการไพพ์ Out-Null ด้านหลัง cmdlet
New-Item -path $path -ItemType Directory -Force | Out-Nullห่อขึ้น
เมื่อเขียนสคริปต์ คุณควรมีความชัดเจนว่าคุณกำลังทำอะไรอยู่ ดังนั้นฉันขอแนะนำให้ใช้ Test-Path ก่อน และสร้างเฉพาะโฟลเดอร์ที่มีการจัดการข้อผิดพลาดที่เหมาะสมหากไม่มีอยู่
หวังว่าคุณจะชอบบทความนี้ หากคุณมีคำถามใด ๆ เพียงแสดงความคิดเห็นด้านล่าง

