چگونه در PowerShell پوشه‌ها و فایل‌ها را به صورت خودکار ایجاد کنیم

7/26/2025 MVC Core
129

چگونه در PowerShell پوشه‌ها و فایل‌ها را به صورت خودکار ایجاد کنیم بدون آن که فایل‌های موجود را بازنویسی کنیم
وقتی که شما در حال توسعه یک اپلیکیشن ASP.NET هستید، به خصوص زمانی که با ViewComponent ها سر و کار دارید، نیاز به ایجاد تعداد زیادی فایل و پوشه برای هر ViewComponent خواهید داشت. انجام این کار به صورت دستی می‌تواند زمان‌بر و پر از خطا باشد، به خصوص اگر پروژه شما شامل چندین ViewComponent باشد.


راه حل:

در PowerShell می‌توانیم بررسی کنیم که آیا پوشه یا فایلی از قبل وجود دارد یا خیر، و تنها در صورتی که آن‌ها موجود نبودند، اقدام به ایجادشان کنیم تا از بازنویسی آن‌ها جلوگیری شود. همچنین می‌توانیم فایل‌های لازم مانند Default.cshtml و فایل‌های ViewComponent را به صورت خودکار ایجاد کنیم و آن‌ها را به ساختار مورد نیاز اضافه کنیم.

 

اسکریپت PowerShell به شرح زیر است:

# از کاربر خواسته می‌شود که نام پوشه را وارد کند
$folderName = Read-Host "Enter the name of the folder"

# تعریف مسیرهای پایه (با استفاده از Join-Path برای مدیریت بهتر مسیرها)
$basePathComponnets = ".\DR.Raz\Areas\Admin\Pages"
$basePath = Join-Path -Path $basePathComponnets -ChildPath "Shared\Components"

# ترکیب مسیر پایه و نام پوشه برای ساخت مسیر کامل پوشه
$folderPath = Join-Path -Path $basePath -ChildPath $folderName
if (-not (Test-Path -Path $folderPath)) {
    New-Item -ItemType Directory -Path $folderPath -Force
    Write-Host "پوشه '$folderName' با موفقیت ایجاد شد."
} else {
    Write-Host "پوشه '$folderName' از قبل وجود دارد. از ایجاد مجدد آن جلوگیری می‌شود."
}

# بررسی اینکه آیا فایل Default.cshtml در پوشه موجود است یا خیر. اگر نیست، ایجاد می‌شود
$defaultFilePath = Join-Path -Path $folderPath -ChildPath "Default.cshtml"
if (-not (Test-Path -Path $defaultFilePath)) {
    New-Item -ItemType File -Path $defaultFilePath -Force
    Write-Host "فایل 'Default.cshtml' با موفقیت در داخل '$folderName' ایجاد شد."
} else {
    Write-Host "فایل 'Default.cshtml' از قبل در داخل '$folderName' موجود است. از ایجاد مجدد آن جلوگیری می‌شود."
}

# ایجاد پوشه ViewComponents (اگر هنوز ایجاد نشده باشد)
$viewComponentsPath = Join-Path -Path $basePathComponnets -ChildPath "ViewComponents"
if (-not (Test-Path $viewComponentsPath)) {
    New-Item -ItemType Directory -Path $viewComponentsPath -Force
    Write-Host "'پوشه ViewComponents' با موفقیت ایجاد شد."
} else {
    Write-Host "'پوشه ViewComponents' از قبل وجود دارد. از ایجاد مجدد آن جلوگیری می‌شود."
}

# بررسی اینکه آیا فایل ViewComponent از قبل موجود است یا خیر
$viewComponentFilePath = Join-Path -Path $viewComponentsPath -ChildPath "$folderName`ViewComponent.cs"
if (-not (Test-Path -Path $viewComponentFilePath)) {
    # کد پیش‌فرض برای ViewComponent
    $viewComponentCode = @"
using Microsoft.AspNetCore.Mvc;

namespace DR.Areas.Pages.ViewComponents
{
    public class $folderName`ViewComponent : ViewComponent 
    {
        public IViewComponentResult Invoke()
        {
            return View();
        }
    }
}
"@

    # ایجاد و نوشتن کد در فایل ViewComponent
    Set-Content -Path $viewComponentFilePath -Value $viewComponentCode
    Write-Host "فایل ViewComponent با نام '$folderName`ViewComponent.cs' با موفقیت ایجاد شد."
} else {
    Write-Host "فایل ViewComponent با نام '$folderName`ViewComponent.cs' از قبل موجود است. از ایجاد مجدد آن جلوگیری می‌شود."
}

 

توضیحات:

  1. استفاده از Join-Path: با استفاده از این تابع، مسیرها به طور امن و صحیح ترکیب می‌شوند و نیازی به نگرانی دربارهٔ وجود یا نبود جداکننده‌ها (\) در انتهای مسیر نیست.

  2. بررسی قبل از ایجاد: با استفاده از دستور Test-Path، اسکریپت بررسی می‌کند که آیا پوشه یا فایل قبلاً وجود دارد یا خیر، تا از بازنویسی محتویات جلوگیری شود.

  3. ایجاد فایل‌های ViewComponent به صورت خودکار: این اسکریپت فایل‌های ViewComponent را به صورت دینامیک و با کد پیش‌فرض ایجاد می‌کند.