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


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.