2016-03-05 18 views
19

chcę, aby wyodrębnić z pliku poniżej ścieżki:Ekstrakt nazwę pliku ze ścieżki

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

Teraz Pisałem ten kod, aby uzyskać nazwę pliku. To działa dobrze, dopóki poziom folderu nie zmienił się. Ale w przypadku zmiany poziomu folderu, ten kod musi zostać przepisany. Szukam sposobu, aby uczynić go bardziej elastycznym, takim jak kod, zawsze może wyodrębnić nazwę pliku, niezależnie od poziomu folderu.

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

Odpowiedz

37

Jeśli zgadzasz się z rozszerzeniem, powinno to zrobić to, co chcesz.

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

Możesz uzyskać taki wynik, jaki chcesz.

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

Jeśli używasz „Get-ChildItem”, aby uzyskać „FULLNAME”, można też użyć „imię”, aby po prostu nazwę pliku.

+3

Wystarczy użyć indeksu '-1' jeśli przyjmuje podejście tablicy:' $ file.Split ("\") [- 1] ' –

+0

Dzięki za info! – David

10

Wykorzystanie .NET:

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

0

$ (Split-Path "D: \ Server \ User \ CUST \ MEA \ Data \ W \ Files \ USUNIĘTE \ CUST_MEAFile.csv" nagietek)

0

Korzystanie z basename w Get- ChildItem wyświetla nazwę pliku i przy użyciu Name wyświetla nazwę pliku z rozszerzeniem.

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

$filepath.BaseName 

Basic-English-Grammar-1 

$filepath.Name 

Basic-English-Grammar-1.pdf