Extrahieren Sie den Dateinamen aus einem Pfad


80

Ich möchte den Dateinamen aus dem folgenden Pfad extrahieren:

D: \ Server \ Benutzer \ CUST \ MEA \ Data \ In \ Files \ CORRECTED \ CUST_MEAFile.csv

Jetzt habe ich diesen Code geschrieben, um den Dateinamen zu erhalten. Dies funktioniert einwandfrei, solange sich die Ordnerebene nicht geändert hat. Falls die Ordnerebene geändert wurde, muss dieser Code neu geschrieben werden. Ich suche nach einer Möglichkeit, es flexibler zu gestalten, da der Code unabhängig von der Ordnerebene immer den Dateinamen extrahieren kann.

($outputFile).split('\')[9].substring(0)

Antworten:


160

Wenn Sie mit der Erweiterung einverstanden sind, sollte dies tun, was Sie wollen.

$outputPath = "D:\Server\User\CUST\MEA\Data\In\Files\CORRECTED\CUST_MEAFile.csv"
$outputFile = Split-Path $outputPath -leaf

6
Dies ist eine großartige Antwort. Es löst das Problem auf die "am meisten eingebaute" Weise. Für meine Bedürfnisse benötigte ich jedoch sowohl den Dateinamen mit Erweiterung als auch den Basisdateinamen, also habe ich die Antwort von @ angularsen verwendet. Es gibt einen weiteren Parameter, -leafbase, der jedoch nur von PowerShell Core 6+ unterstützt wird.
Jamie

59

Verwenden ::

[System.IO.Path]::GetFileName("c:\foo.txt")kehrt zurück foo.txt. [System.IO.Path]::GetFileNameWithoutExtension("c:\foo.txt")kehrt zurückfoo


14

Wenn Sie den Basisnamen in Get-ChildItem verwenden, wird der Name der Datei und bei Verwendung des Namens der Dateiname mit der Erweiterung angezeigt.

$filepath = Get-ChildItem "E:\Test\Basic-English-Grammar-1.pdf"

$filepath.BaseName

Basic-English-Grammar-1

$filepath.Name

Basic-English-Grammar-1.pdf

4

Sie könnten das gewünschte Ergebnis erhalten.

$file = "D:\Server\User\CUST\MEA\Data\In\Files\CORRECTED\CUST_MEAFile.csv"
$a = $file.Split("\")
$index = $a.count - 1
$a.GetValue($index)

Wenn Sie "Get-ChildItem" verwenden, um den "vollständigen Namen" abzurufen, können Sie auch "name" verwenden, um nur den Namen der Datei abzurufen.


5
Verwenden -1Sie einfach den Index, wenn Sie den Array-Ansatz $file.Split("\")[-1]
wählen

Was können wir tun, wenn wir die Erweiterung entfernen möchten?
Souradeep Banerjee-AIS

4
Get-ChildItem "D:\Server\User\CUST\MEA\Data\In\Files\CORRECTED\CUST_MEAFile.csv"
|Select-Object -ExpandProperty Name

3

Um die obige Antwort zu vervollständigen, verwenden Sie .Net.

In diesem Code wird der Pfad im %1Argument gespeichert (das in der Registrierung unter Anführungszeichen geschrieben ist, die maskiert sind :) \"%1\". Um es abzurufen, benötigen wir das $arg(eingebaute Argument). Vergessen Sie nicht das Zitat herum $FilePath.

# Get the File path:  
$FilePath = $args
Write-Host "FilePath: " $FilePath

# Get the complete file name:
$file_name_complete = [System.IO.Path]::GetFileName("$FilePath")
Write-Host "fileNameFull :" $file_name_complete

# Get File Name Without Extension:
$fileNameOnly = [System.IO.Path]::GetFileNameWithoutExtension("$FilePath")
Write-Host "fileNameOnly :" $fileNameOnly

# Get the Extension:
$fileExtensionOnly = [System.IO.Path]::GetExtension("$FilePath")
Write-Host "fileExtensionOnly :" $fileExtensionOnly

3
$(Split-Path "D:\Server\User\CUST\MEA\Data\In\Files\CORRECTED\CUST_MEAFile.csv" -leaf)

2

Sie können dies versuchen:

[System.IO.FileInfo]$path = "D:\Server\User\CUST\MEA\Data\In\Files\CORRECTED\CUST_MEAFile.csv"
# Returns name and extension
$path.Name
# Returns just name
$path.BaseName

1

Suchen Sie eine Datei mit einem Platzhalter und erhalten Sie den Dateinamen:

Resolve-Path "Package.1.0.191.*.zip" | Split-Path -leaf

0
$file = Get-Item -Path "c:/foo/foobar.txt"
$file.Name

Funktioniert mit beiden relativen und absoluten Pfaden

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.