wake-up-neo.com

Powershell - Dateinamen und Dateierweiterung extrahieren

Ich muss den Dateinamen und die Dateierweiterung von z. my.file.xlsx. Ich kenne den Dateinamen oder die Dateierweiterung nicht und der Name enthält möglicherweise mehr Punkte. Daher muss ich die Zeichenfolge von rechts durchsuchen und, wenn ich den ersten Punkt (oder den letzten von links) finde, den Teil auf der Seite extrahieren rechte Seite und der Teil auf der linken Seite von diesem Punkt.

Vielleicht gibt es eine bessere Lösung, aber ich habe hier oder anderswo nichts gefunden. Vielen Dank

96
culter

Wenn die Datei von der Festplatte kommt und wie andere angegeben haben, verwenden Sie die Eigenschaften BaseName und Extension:

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

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

Wenn Sie den Dateinamen als Teil einer Zeichenfolge erhalten (z. B. aus einer Textdatei), würde ich die statischen Methoden GetFileNameWithoutExtension und GetExtension aus System.IO.Path) verwenden Klasse:

PS C:\> [System.IO.Path]::GetFileNameWithoutExtension("Test Config.xlsx")
Test Config
PS H:\> [System.IO.Path]::GetExtension("Test Config.xlsx")
.xlsx
151
Goyuix
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
21
Straff

Wenn es sich um eine Textdatei handelt und die mutmaßliche Namensdatei von Leerzeichen umgeben ist, haben Sie folgende Möglichkeiten:

$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('.'))) }

Wenn es sich um eine Datei handelt, können Sie je nach Bedarf Folgendes verwenden:

$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
11
CB.

Überprüfen Sie die Eigenschaften BaseName und Extension des FileInfo-Objekts.

8
Shay Levy
PS C:\Users\joshua> $file = New-Object System.IO.FileInfo('file.type')
PS C:\Users\joshua> $file.BaseName, $file.Extension
file
.type
8
Jaqueline Vanek

Benutze Split-Path

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

mach es einfach:

$file=Get-Item "C:\temp\file.htm"
$file.Name
$file.Extension
3
Esperento57

Dies ist eine Anpassung, wenn jemand neugierig ist. Ich musste testen, ob RoboCopy eine Datei erfolgreich auf mehrere Server kopiert hat, um die Integrität zu gewährleisten:

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

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

Schön und einfach, und es zeigt das Verzeichnis und die Datei darin. Wenn Sie einen Dateinamen oder eine Dateierweiterung angeben möchten, ersetzen Sie einfach die * durch die von Ihnen gewünschten.

    Directory: \\SERVER\Folder\Share

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