2016-03-05 21 views
19

Voglio estrarre il nome del file dal basso percorso:Estrarre il nome del file da un percorso

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

Ora ho scritto questo codice per ottenere il nome del file. Questo funziona bene fino a quando il livello della cartella non è cambiato. Ma nel caso in cui il livello della cartella è stato modificato, questo codice deve essere riscritto. Sto cercando un modo per renderlo più flessibile, ad esempio il codice può sempre estrarre il nome del file indipendentemente dal livello della cartella.

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

risposta

37

Se si sta bene con l'estensione, questo dovrebbe fare ciò che si desidera.

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

Si potrebbe ottenere il risultato desiderato in questo modo.

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

Se si utilizza "Get-ChildItem" per ottenere il "fullname", si potrebbe anche usare "nome" per ottenere solo il nome del file.

+3

è sufficiente utilizzare l'indice di '-1' se si sta prendendo l'approccio matrice:' $ file.Split ("\") [- 1] ' –

+0

Grazie per le informazioni! – David

10

Uso .NET:

[System.IO.Path]::GetFileName("c:\foo.txt") rendimenti foo.txt. [System.IO.Path]::GetFileNameWithoutExtension("c:\foo.txt") rendimenti foo

0

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

0

Utilizzando la BaseName in Get- ChildItem visualizza il nome del file e utilizza Nome per visualizzare il nome del file con l'estensione.

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

$filepath.BaseName 

Basic-English-Grammar-1 

$filepath.Name 

Basic-English-Grammar-1.pdf 
Problemi correlati