পাওয়ারশেলের পিতা-মাতার পিতামাতার ডিরেক্টরিটি কীভাবে পাবেন?


96

সুতরাং আমার যদি কোনও ভেরিয়েবলে ডিরেক্টরি সঞ্চয় থাকে তবে বলুন:

$scriptPath = (Get-ScriptDirectory);

এখন আমি ডিরেক্টরিটি দুটি পিতামাতার স্তরের সন্ধান করতে চাই।

আমার করার একটি দুর্দান্ত উপায় দরকার:

$parentPath = Split-Path -parent $scriptPath
$rootPath = Split-Path -parent $parentPath

আমি কি কোডের এক লাইনে রুটপথে যেতে পারি?

উত্তর:


163

একটি ডিরেক্টরি জন্য সংস্করণ

get-item এখানে আপনার বন্ধুত্বপূর্ণ সাহায্যের হাত?

(get-item $scriptPath ).parent.parent

আপনি যদি কেবল স্ট্রিং চান

(get-item $scriptPath ).parent.parent.FullName

একটি ফাইলের জন্য সংস্করণ

যদি $scriptPathকোনও ফাইলের দিকে নির্দেশ করে তবে আপনাকে Directoryপ্রথমে এর উপর সম্পত্তি কল করতে হবে, তাই কলটি এর মতো দেখাবে

(get-item $scriptPath).Directory.Parent.Parent.FullName

মন্তব্যসমূহ বিদ্যমান
থাকলে এটি কাজ করবে $scriptPath। অন্যথায় আপনাকে Split-Pathসেমিডলেট ব্যবহার করতে হবে ।


অসাধারণ @rerun, এটি ডিরেক্টরি অবজেক্টটি ফিরিয়ে দেয়, তারপরে স্ট্রিংয়ে ফেরত পাঠানোর আদেশ কী?
— মার্ক কাদলেক

12
.parentকেবল ডিরেক্টরি বস্তুগুলিতে কাজ করে। আমার যদি কোনও ফাইলে যাওয়ার পথ থাকে এবং আমি যে ডিরেক্টরিটি ফাইলটিতে (get-item $PathToFile ).Directory.parent
— রয়েছি তার পিতামাতার সন্ধান

6
মনে রাখবেন যে এটি $scriptPathবিদ্যমান থাকলেই কাজ করে। অন্যথায় শুধু ব্যবহার করুন Split-Path $scriptPath -parent।
— ওরাড

4
আমি আপনার উত্তরে @ বোওদাদ মন্তব্যের একীভূত হওয়ার প্রস্তাব দিয়েছি যাতে এটি অন্য সদস্যদের কাছে আরও দৃশ্যমান হয়।
— SOReader

34

আমি এটির মতো সমাধান করেছি:

$RootPath = Split-Path (Split-Path $PSScriptRoot -Parent) -Parent

$RootPath = Split-Path (Split-Path $PSScriptRoot)এছাড়াও কাজ করে যেহেতু -Parentডিফল্ট জন্য অবস্থান বিভক্ত প্যারামিটারSplit-Path
— jarrad_obrien

22

আপনি এটিকে ব্যাকস্ল্যাশগুলিতে বিভক্ত করতে পারেন এবং কেবল দাদা-পিতামহ ডিরেক্টরিের নাম পেতে নেগেটিভ অ্যারে সূচক সহ পরবর্তী-শেষ-এক নিতে পারেন।

($scriptpath -split '\\')[-2]

এটিকে রেজিজেসে এড়াতে আপনাকে ব্যাকস্ল্যাশ দ্বিগুণ করতে হবে।

পুরো পথটি পেতে:

($path -split '\\')[0..(($path -split '\\').count -2)] -join '\'

এবং, বিভক্ত-পথের পরামিতিগুলির দিকে তাকিয়ে, এটি পাইপলাইন ইনপুট হিসাবে পথ নেয়, সুতরাং:

$rootpath = $scriptpath | split-path -parent | split-path -parent

প্রথমে এই পরামিতিগুলি পরীক্ষা করা উচিত ছিল।
— mjolinor

12

তুমি ব্যবহার করতে পার

(get-item $scriptPath).Directoryname

স্ট্রিং পাথ পেতে বা যদি আপনি ডিরেক্টরি টাইপ ব্যবহার করতে চান:

(get-item $scriptPath).Directory

5

পাওয়ারশেল 3 এ, $PsScriptRootবা আপনার দুই বাবা-মাকে প্রশ্ন করা হয়েছে,

$dir = ls "$PsScriptRoot\..\.."

5

split-pathআপনার প্রয়োজন অনুসারে আপনি কেবল চেইন করতে পারেন :

$rootPath = $scriptPath | split-path | split-path


2

অন্যান্য উত্তরে কিছুটা এক্সট্রোপোলেটেড করার জন্য (যতটা সম্ভব প্রাথমিকভাবে বন্ধুত্বপূর্ণভাবে):

  • বৈধ পাথগুলিতে নির্দেশিত স্ট্রিং অবজেক্টগুলিকে গেট-আইটেম এবং গেট-চাইল্ড আইটেমের মতো ফাংশনগুলির মাধ্যমে ডিরেক্টরীআইএনফো / ফাইলআইএনফোর অবজেক্টগুলিতে রূপান্তর করা যেতে পারে।
  • । পিতামাতা কেবল একটি ডিরেক্টরীআইএনফো অবজেক্টে ব্যবহার করা যায়।
  • .ডাইরেক্টরি ফাইলআইএনফো অবজেক্টকে ডাইরেক্টরিআইএনফো অবজেক্টে রূপান্তরিত করে এবং অন্য যে কোনও ধরণের (এমনকি অন্য কোনও ডিরেক্টরি ডাইরেক্টরিআইফোন অবজেক্ট) ব্যবহার করা হলে শূন্য ফিরে আসবে।
  • .DirectoryName একটি ফাইলআইফোন বস্তুকে স্ট্রিং অবজেক্টে রূপান্তরিত করে এবং অন্য যে কোনও ধরণের (এমনকি অন্য একটি স্ট্রিং অবজেক্ট) ব্যবহার করা হলে শূন্য হয়।
  • .FullName একটি DirectoryInfo / FileInfo অবজেক্টটিকে স্ট্রিং অবজেক্টে রূপান্তরিত করে এবং অন্য যে কোনও ধরণের (এমনকি অন্য কোনও ডিরেক্টরি DirectoryInfo / FileInfo অবজেক্ট) ব্যবহার করা হলে শূন্য ফিরে আসবে।

আপনি কী নিয়ে কাজ করছেন তা দেখতে গেটটাইপ পদ্ধতির সাথে অবজেক্টের ধরণটি পরীক্ষা করুন: $scriptPath.GetType()

শেষ অবধি, একটি দ্রুত টিপ যা ওয়ান-লাইনার তৈরি করতে সহায়তা করে: giগেট-আইটেমটির উপনাম রয়েছে এবং গেট-চাইল্ড আইটেমের উপাধি রয়েছে gci।


0

আপনি যদি $ PSScriptRut ব্যবহার করতে চান তবে আপনি করতে পারেন

Join-Path -Path $PSScriptRoot -ChildPath ..\.. -Resolve

0

পাওয়ারশেলে:

$this_script_path = $(Get-Item $($MyInvocation.MyCommand.Path)).DirectoryName

$parent_folder = Split-Path $this_script_path -Leaf
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.