शक्तियां - फ़ाइल नाम और एक्सटेंशन निकालें


114

मुझे उदा। My.file.xlsx से फ़ाइल नाम और एक्सटेंशन निकालने की आवश्यकता है। मुझे फ़ाइल या एक्सटेंशन का नाम नहीं पता है और नाम में और भी डॉट्स हो सकते हैं, इसलिए मुझे दाईं ओर से स्ट्रिंग खोजने की जरूरत है और जब मुझे पहली डॉट (या बाईं ओर से अंतिम) मिल जाए, तो उस भाग को निकालें दाईं ओर और उस डॉट से बाईं ओर का हिस्सा।

हो सकता है कि बेहतर समाधान हो, लेकिन मुझे यहां या कहीं और कुछ भी नहीं मिला। धन्यवाद


एक पाठ फ़ाइल से या क्या से निकालें?
सीबी।

हाय ईसाई, मैंने अपना प्रश्न अपडेट कर लिया है। मुझे फ़ाइल के नाम से इसे निकालने की आवश्यकता है। धन्यवाद
अपराधी

जवाबों:


174

यदि फ़ाइल डिस्क से आ रही है और जैसा कि अन्य लोगों ने कहा है, गुणों BaseNameऔर Extensionगुणों का उपयोग करें :

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

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

यदि आपको फ़ाइल नाम स्ट्रिंग के भाग के रूप में दिया गया है (जैसे कि एक पाठ फ़ाइल से आ रहा है), मैं System.IO.Path वर्ग से GetFileNameWithoutExtensionऔर GetExtensionस्थैतिक तरीकों का उपयोग करूंगा :

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

9
MSDN प्रलेखन का संदर्भ लिए बिना System.IO.Path वर्ग में अधिक उपयोगी तरीकों के लिए, आप का उपयोग कर सकते हैं[System.IO.Path] | Get-Member -Static
फिल

2
ध्यान दें कि अवधि ("") सहित[System.IO.Path]::GetExtension विस्तार लौटाता है ।
ओहद श्नाइडर

धन्यवाद @OhadSchneider
m1m1k

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

FileInfo ऑब्जेक्ट का बेसनेम और एक्सटेंशन गुण जांचें।


1
किसी विशेष infoyou're के बाद? सरकारी सहायता प्राप्त करने के लिए, सभी सदस्यों को प्रकट करने या MSDN में ब्राउज़ करने के लिए Get-Member के लिए एक फ़ाइल को पाइप करें।
शाय लेवी

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]इसे नाम में डॉट्स के साथ फाइलों के साथ काम करने के लिए बदल सकते हैं
phuclv


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

PowerShell 6.0 के रूप में, Split-Pathएक -Extenstionपैरामीटर है। इसका मतलब है आप कर सकते हैं:

$path | Split-Path -Extension

या

Split-Path -Path $path -Extension

$path = "test.txt"दोनों संस्करणों के लिए .txt, पूर्ण विराम को छोड़कर वापस आ जाएगा ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.