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

สร้างโฟลเดอร์หากไม่มี 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 ก่อน และสร้างเฉพาะโฟลเดอร์ที่มีการจัดการข้อผิดพลาดที่เหมาะสมหากไม่มีอยู่

หวังว่าคุณจะชอบบทความนี้ หากคุณมีคำถามใด ๆ เพียงแสดงความคิดเห็นด้านล่าง