ডিরেক্টরি উপস্থিত না থাকলে এটি তৈরি করুন


341

আমি পাওয়ারশেল স্ক্রিপ্ট লিখছি যদি তারা না থাকে তবে বেশ কয়েকটি ডিরেক্টরি তৈরি করতে পারি।

ফাইল সিস্টেম এর সাথে একই রকম দেখাচ্ছে

D:\
D:\TopDirec\SubDirec\Project1\Revision1\Reports\
D:\TopDirec\SubDirec\Project2\Revision1\
D:\TopDirec\SubDirec\Project3\Revision1\
  • প্রতিটি প্রকল্পের ফোল্ডারে একাধিক সংশোধন থাকে।
  • প্রতিটি পুনর্বিবেচনা ফোল্ডারে একটি প্রতিবেদন ফোল্ডার প্রয়োজন।
  • কিছু "পুনর্বিবেচনা" ফোল্ডার ইতিমধ্যে একটি রিপোর্ট ফোল্ডার ধারণ করে; তবে, অধিকাংশ না।

প্রতিটি ডিরেক্টরিতে এই ফোল্ডারগুলি তৈরি করতে আমাকে প্রতিদিন স্ক্রিপ্ট লিখতে হবে।

আমি একটি ফোল্ডার তৈরি করতে স্ক্রিপ্ট লিখতে সক্ষম, তবে বেশ কয়েকটি ফোল্ডার তৈরি করা সমস্যাযুক্ত।


3
"বেশ কয়েকটি ফোল্ডার তৈরি করা সমস্যাযুক্ত" - আপনার কী ধরণের সমস্যা হচ্ছে? আপনি কীভাবে কড লিখবেন তা নিশ্চিত নন? আপনি একটি ত্রুটির বার্তা পাচ্ছেন? স্ক্রিপ্টটি চালানোর পরে কি ফোল্ডারগুলি উপস্থিত হবে না? বিভিন্ন সমস্যা বিভিন্ন সমাধান প্রয়োজন।
লার্শ

উত্তর:


535

ব্যবহার করে দেখুন -Forceপরামিতি:

New-Item -ItemType Directory -Force -Path C:\Path\That\May\Or\May\Not\Exist

আপনি Test-Path -PathType Containerপ্রথমে চেক করতে ব্যবহার করতে পারেন ।

দেখুন নতুন আইটেম আরো বিস্তারিত জানার জন্য দুটিই MSDN সহায়তা নিবন্ধে।


101
অলসতার জন্য, একটি শর্টহ্যান্ড রয়েছে: এমডি-ফরাসী সি: oo ফুও বার \ বাজ
ম্যাথিউ ফেলো

74
ফোল্ডারটি তৈরি হওয়ার সময় যারা কোনও আউটপুট চান না তাদের জন্য, শেষে "| আউট-নুল" যুক্ত করুন
armannvg

20
-ফোরস আসলে কি করবে? ডকুমেন্টেশনটিতে বলা হয়েছে "এই সেমিডলেটটিকে এমন একটি আইটেম তৈরি করতে বাধ্য করে যা বিদ্যমান পঠনযোগ্য কেবলমাত্র আইটেমটিতে লেখায়" । এটি কোনও বিদ্যমান ফোল্ডারটি মুছে ফেলবে? এটি এই উত্তরে পরিষ্কার হওয়া উচিত।
পিটার মর্টেনসেন

25
@ পিটারমোরটেনসেন ডিরেক্টরিগুলির ক্ষেত্রে, তাদের জোর করে বিদ্যমান বিষয়বস্তুগুলি পরিষ্কার করে না, এটি ত্রুটি বার্তাকে দমন করে যে এটি ইতিমধ্যে তৈরি হয়েছে। এই কমান্ডটি যে কোনও হস্তক্ষেপকারী ফোল্ডারগুলি প্রয়োজনীয় তৈরি করবে এবং fold ফোল্ডারগুলির সামগ্রীগুলি ইতিমধ্যে উপস্থিত থাকলে সেগুলিও নিরাপদ are
জন নিউউউস

161
$path = "C:\temp\NewFolder"
If(!(test-path $path))
{
      New-Item -ItemType Directory -Force -Path $path
}

Test-Pathপথটি বিদ্যমান কিনা তা পরীক্ষা করে দেখুন। এটি যখন না করে, এটি একটি নতুন ডিরেক্টরি তৈরি করবে।


নিস! ডিরেক্টরিটি ইতিমধ্যে উপস্থিত থাকলে (কারণ এটি ব্যবহার করে test-path) এটি আউটপুটকে স্তব্ধ করে দেয় ।
যুদ্ধের মতো শিম্পাঞ্জি

17

নিম্নলিখিত কোড স্নিপেট আপনাকে একটি সম্পূর্ণ পথ তৈরি করতে সহায়তা করে।

Function GenerateFolder($path) {
    $global:foldPath = $null
    foreach($foldername in $path.split("\")) {
        $global:foldPath += ($foldername+"\")
        if (!(Test-Path $global:foldPath)){
            New-Item -ItemType Directory -Path $global:foldPath
            # Write-Host "$global:foldPath Folder Created Successfully"
        }
    }
}

উপরের ফাংশনটি আপনি ফাংশনে যে পথটি বিভক্ত করেছেন সেটিকে বিভক্ত করে এবং প্রতিটি ফোল্ডার এটি উপস্থিত রয়েছে কি নেই তা যাচাই করবে। যদি এটি বিদ্যমান না থাকে তবে লক্ষ্য / চূড়ান্ত ফোল্ডার তৈরি না হওয়া পর্যন্ত এটি সম্পর্কিত ফোল্ডারটি তৈরি করবে।

ফাংশনটি কল করতে, নীচের বিবৃতিটি ব্যবহার করুন:

GenerateFolder "H:\Desktop\Nithesh\SrcFolder"

1
এইটি সবচেয়ে সহজ নয়, তবে এটি বোঝার জন্য সহজ।
ওয়াং জিজুন

চমৎকার সমাধান! ধন্যবাদ;)
আলবার্তো এস।

13

আমার ঠিক একই সমস্যা ছিল. আপনি এর মতো কিছু ব্যবহার করতে পারেন:

$local = Get-Location;
$final_local = "C:\Processing";

if(!$local.Equals("C:\"))
{
    cd "C:\";
    if((Test-Path $final_local) -eq 0)
    {
        mkdir $final_local;
        cd $final_local;
        liga;
    }

    ## If path already exists
    ## DB Connect
    elseif ((Test-Path $final_local) -eq 1)
    {
        cd $final_local;
        echo $final_local;
        liga;  (function created by you TODO something)
    }
}

11

আপনি নির্দিষ্ট যখন -Force পতাকাটি , ফোল্ডারটি ইতিমধ্যে উপস্থিত থাকলে পাওয়ারশেল অভিযোগ করবে না।

এক রৈখিক:

Get-ChildItem D:\TopDirec\SubDirec\Project* | `
  %{ Get-ChildItem $_.FullName -Filter Revision* } | `
  %{ New-Item -ItemType Directory -Force -Path (Join-Path $_.FullName "Reports") }

বিটিডাব্লু, টাস্ক শিডিয়ুল করার জন্য দয়া করে এই লিঙ্কটি দেখুন: ব্যাকগ্রাউন্ড জব শিডিউল করুন


10

ব্যবহার করুন:

$path = "C:\temp\"

If (!(test-path $path))
{
    md C:\Temp\
}
  • প্রথম লাইন নামের একটি ভেরিয়েবল তৈরি করে $pathএবং এটিকে "C: \ temp \" এর স্ট্রিংয়ের মান নির্ধারণ করে

  • দ্বিতীয় লাইন একটি হল Ifবিবৃতি যার উপর নির্ভর করে টেস্ট-পাথ cmdlet চেক করতে যদি পরিবর্তনশীল $pathনেই না বিদ্যমান। উপস্থিত নেই !প্রতীক ব্যবহার করে যোগ্য ।

  • তৃতীয় লাইন: উপরের স্ট্রিংয়ে সঞ্চিত পথটি যদি খুঁজে না পাওয়া যায় তবে কোঁকড়ানো বন্ধনীগুলির মধ্যে কোডটি চালানো হবে।

md টাইপিংয়ের সংক্ষিপ্ত সংস্করণটি: New-Item -ItemType Directory -Path $path

দ্রষ্টব্য: আমি -Forceযদি পথটি ইতিমধ্যে বিদ্যমান থাকে তবে অনাকাঙ্ক্ষিত আচরণ আছে কিনা তা দেখার জন্য আমি নীচের সাথে প্যারামিটার ব্যবহার করে পরীক্ষা করিনি ।

New-Item -ItemType Directory -Path $path

1
এটি ডিরেক্টরিগুলির একটি শ্রেণিবিন্যাসের জন্যও কাজ করে যা md "C:\first\second\thirdসেগুলি তৈরি করে।
মর্টেনবি

9

পাওয়ারশেল ব্যবহার করে ডিরেক্টরি তৈরি করার জন্য আমি তিনটি উপায় জানি:

Method 1: PS C:\> New-Item -ItemType Directory -path "C:\livingston"

এখানে চিত্র বিবরণ লিখুন

Method 2: PS C:\> [system.io.directory]::CreateDirectory("C:\livingston")

এখানে চিত্র বিবরণ লিখুন

Method 3: PS C:\> md "C:\livingston"

এখানে চিত্র বিবরণ লিখুন


মনে রাখবেন যে লিনাক্স / ইউনিক্স mkdir এর অনুরূপ উইন্ডোজ কমান্ড `mkdir` (ডিরেক্টরি তৈরি করুন) -এর জন্য `md কেবল একটি পাওয়ারশেল ডিফল্ট উপন্যাস। রেফ: `গেট-এলিয়াস
এমডি`

4

আপনার পরিস্থিতি থেকে দেখে মনে হচ্ছে আপনার সেখানে "রিপোর্টস" ফোল্ডারটি নিয়ে দিনে একবার "সংশোধন #" ফোল্ডার তৈরি করা দরকার। যদি এটি হয় তবে আপনার পরবর্তী সংস্করণ সংখ্যাটি কী তা জানতে হবে। একটি ফাংশন লিখুন যা পরবর্তী সংশোধন নম্বর পায়, গেট-নেক্সটরেভিশননম্বার। অথবা আপনি এরকম কিছু করতে পারেন:

foreach($Project in (Get-ChildItem "D:\TopDirec" -Directory)){
    # Select all the Revision folders from the project folder.
    $Revisions = Get-ChildItem "$($Project.Fullname)\Revision*" -Directory

    # The next revision number is just going to be one more than the highest number.
    # You need to cast the string in the first pipeline to an int so Sort-Object works.
    # If you sort it descending the first number will be the biggest so you select that one.
    # Once you have the highest revision number you just add one to it.
    $NextRevision = ($Revisions.Name | Foreach-Object {[int]$_.Replace('Revision','')} | Sort-Object -Descending | Select-Object -First 1)+1

    # Now in this we kill two birds with one stone.
    # It will create the "Reports" folder but it also creates "Revision#" folder too.
    New-Item -Path "$($Project.Fullname)\Revision$NextRevision\Reports" -Type Directory

    # Move on to the next project folder.
    # This untested example loop requires PowerShell version 3.0.
}

PowerShell 3.0 ইনস্টলেশন


2

আমি ব্যবহারকারীদের সহজেই কিছু সেটিংস ওভাররাইড করার জন্য পাওয়ারশেলের জন্য একটি ডিফল্ট প্রোফাইল তৈরি করতে দিতে সক্ষম হয়েছি এবং নীচের ওয়ান-লাইনার দিয়ে শেষ করেছি (একাধিক বিবৃতি হ্যাঁ, তবে পাওয়ারশেলে আটকানো যেতে পারে এবং একবারেই কার্যকর করা যেতে পারে, যা মূল লক্ষ্য ছিল ):

cls; [string]$filePath = $profile; [string]$fileContents = '<our standard settings>'; if(!(Test-Path $filePath)){md -Force ([System.IO.Path]::GetDirectoryName($filePath)) | Out-Null; $fileContents | sc $filePath; Write-Host 'File created!'; } else { Write-Warning 'File already exists!' };

পঠনযোগ্যতার জন্য, আমি পরিবর্তে এটি একটি .ps1 ফাইলে কী করব তা এখানে:

cls; # Clear console to better notice the results
[string]$filePath = $profile; # Declared as string, to allow the use of texts without plings and still not fail.
[string]$fileContents = '<our standard settings>'; # Statements can now be written on individual lines, instead of semicolon separated.
if(!(Test-Path $filePath)) {
  New-Item -Force ([System.IO.Path]::GetDirectoryName($filePath)) | Out-Null; # Ignore output of creating directory
  $fileContents | Set-Content $filePath; # Creates a new file with the input
  Write-Host 'File created!';
}
else {
  Write-Warning "File already exists! To remove the file, run the command: Remove-Item $filePath";
};

1

এখানে আমার পক্ষে কাজ করেছেন এমন একটি সহজ। এটি पथটি বিদ্যমান কিনা তা পরীক্ষা করে এবং যদি এটি না ঘটে তবে এটি কেবল মূল পাথই নয়, সমস্ত উপ-ডিরেক্টরিও তৈরি করবে:

$rptpath = "C:\temp\reports\exchange"

if (!(test-path -path $rptpath)) {new-item -path $rptpath -itemtype directory}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.