পাওয়ারশেল - ফাইলের নাম এবং এক্সটেনশন এক্সট্রাক্ট


114

আমার উদাহরণস্বরূপ my.file.xlsx থেকে ফাইলের নাম এবং এক্সটেনশানটি বের করতে হবে। আমি ফাইল বা এক্সটেনশনের নাম জানি না এবং নামটিতে আরও বিন্দু থাকতে পারে, তাই ডান দিক থেকে স্ট্রিংটি অনুসন্ধান করতে হবে এবং যখন আমি প্রথম বিন্দুটি (বা বাম থেকে শেষ) পাব, তখন অংশটি বের করুন ডট দিক এবং সেই বিন্দু থেকে বাম দিকের অংশ।

সম্ভবত এর থেকে আরও ভাল সমাধান হতে পারে তবে আমি এখানে বা অন্য কোথাও কিছুই পাইনি। ধন্যবাদ


একটি টেক্সট ফাইল থেকে এক্সট্রাক্ট বা কি থেকে?
সিবি

হাই ক্রিশ্চান, আমি আমার প্রশ্ন আপডেট করেছি। ফাইলটির নাম থেকে আমার এটি বের করতে হবে। ধন্যবাদ
পলাতক

উত্তর:


173

যদি ফাইলটি ডিস্ক থেকে আসে এবং অন্যেরা যেমন বলেছে, BaseNameএবং Extensionবৈশিষ্ট্যগুলি ব্যবহার করুন :

PS C:\> dir *.xlsx | select BaseName,Extension

BaseName                                Extension
--------                                ---------
StackOverflow.com Test Config           .xlsx  

আপনি STRING (একটি টেক্সট ফাইল থেকে আসছে বলে) অংশ হিসেবে ফাইলের নাম দেওয়া হয় তবে আমি ব্যবহার করেন GetFileNameWithoutExtensionএবং GetExtensionথেকে স্ট্যাটিক পদ্ধতি System.IO.Path শ্রেণী:

PS C:\> [System.IO.Path]::GetFileNameWithoutExtension("Test Config.xlsx")
Test Config
PS H:\> [System.IO.Path]::GetExtension("Test Config.xlsx")
.xlsx

8
এমএসডিএন ডকুমেন্টেশন উল্লেখ না করেই সিস্টেম.আইও.পাথ ক্লাসে আরও দরকারী পদ্ধতির জন্য আপনি ব্যবহার করতে পারেন[System.IO.Path] | Get-Member -Static
ফিল

2
নোট করুন যে পিরিয়ড ("।") সহ[System.IO.Path]::GetExtension এক্সটেনশনটি ফেরত দেয় ।
ওহাদ স্নাইডার

আপনাকে ধন্যবাদ @ ওহাদস্কিনিডার
এম 1 এম 1 কে

24
PS C:\Windows\System32\WindowsPowerShell\v1.0>split-path "H:\Documents\devops\tp-mkt-SPD-38.4.10.msi" -leaf
tp-mkt-SPD-38.4.10.msi

PS C:\Windows\System32\WindowsPowerShell\v1.0> $psversiontable

Name                           Value
----                           -----
CLRVersion                     2.0.50727.5477
BuildVersion                   6.1.7601.17514
PSVersion                      2.0
WSManStackVersion              2.0
PSCompatibleVersions           {1.0, 2.0}
SerializationVersion           1.1.0.1
PSRemotingProtocolVersion      2.1

13

যদি কোনও পাঠ্য ফাইল থেকে হয় এবং এবং অনুমান করা যায় যে নাম ফাইলটি সাদা জায়গাগুলিতে ঘিরে থাকে তবে এটি একটি উপায়:

$a = get-content c:\myfile.txt

$b = $a | select-string -pattern "\s.+\..{3,4}\s" | select -ExpandProperty matches | select -ExpandProperty value

$b | % {"File name:{0} - Extension:{1}" -f $_.substring(0, $_.lastindexof('.')) , $_.substring($_.lastindexof('.'), ($_.length - $_.lastindexof('.'))) }

যদি কোনও ফাইল হয় তবে আপনি আপনার প্রয়োজনের ভিত্তিতে এরকম কিছু ব্যবহার করতে পারেন:

$a = dir .\my.file.xlsx # or $a = get-item c:\my.file.xlsx 

$a
    Directory: Microsoft.PowerShell.Core\FileSystem::C:\ps


Mode           LastWriteTime       Length Name
----           -------------       ------ ----
-a---      25/01/10    11.51          624 my.file.xlsx


$a.BaseName
my.file
$a.Extension
.xlsx


8

ফাইলআইএনফো অবজেক্টের বেসনাম এবং এক্সটেনশন বৈশিষ্ট্যগুলি পরীক্ষা করে দেখুন।


1
কোন বিশেষ infoyou're পরে? এর সমস্ত সদস্যদের প্রকাশ করতে গেট-সদস্যের জন্য কেবল একটি ফাইলটি পাইপ করুন বা অফিসিয়াল সহায়তা পেতে এমএসডিএন ব্রাউজ করুন।
শ্যা লেভি

7

স্প্লিট-পাথ ব্যবহার করুন

$filePath = "C:\PS\Test.Documents\myTestFile.txt";
$fileName = (Split-Path -Path $filePath -Leaf).Split(".")[0];
$extension = (Split-Path -Path $filePath -Leaf).Split(".")[1];

2
নোট করুন ফাইলের নামকরণের সময়সীমা না থাকলে এটি কেবলমাত্র কাজ করবে।
হাফডোন

2
Split(".")[-1]নামের সাথে
বিন্দুযুক্ত


0

এটি একটি অভিযোজন, যদি কেউ আগ্রহী হয়। আমার পরীক্ষার দরকার ছিল যে রবকপি সফলতার সাথে এক ফাইলকে একাধিক সার্ভারে অনুলিপি করেছে:

   $Comp = get-content c:\myfile.txt

ForEach ($PC in $Comp) {
    dir "\\$PC\Folder\Share\*.*" | Select-Object $_.BaseName
}

দুর্দান্ত এবং সহজ, এবং এটি এর ভিতরে ডিরেক্টরি এবং ফাইলটি দেখায়। আপনি যদি একটি ফাইলের নাম বা এক্সটেনশান নির্দিষ্ট করতে চান তবে * এর যা ইচ্ছা তাই বদলে দিন

    Directory: \\SERVER\Folder\Share

Mode                LastWriteTime     Length Name                                                                                                                                             
----                -------------     ------ ----                                                                                                                                             
-a---         2/27/2015   5:33 PM    1458935 Test.pptx                                                                                                             

0

পাওয়ারশেল 6.0 হিসাবে, Split-Pathএর একটি -Extenstionপ্যারামিটার রয়েছে। এর অর্থ আপনি এটি করতে পারেন:

$path | Split-Path -Extension

অথবা

Split-Path -Path $path -Extension

জন্য $path = "test.txt"উভয় সংস্করণই ফিরে আসবে .txt, পূর্ণ স্টপ inluding।

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