Подтвердить что ты не робот

Извлечь имя файла из пути

Я хочу извлечь имя файла из нижеуказанного пути:

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

Теперь я написал этот код, чтобы получить имя файла. Это работает нормально, пока уровень папки не изменился. Но в случае изменения уровня папки этот код необходимо переписать. Я ищу способ сделать его более гибким, например, код всегда может извлекать имя файла независимо от уровня папки.

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

Ответ 1

Если вы в порядке, включая расширение, это должно делать то, что вы хотите.

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

Ответ 2

Используйте .NET:

[System.IO.Path]::GetFileName("c:\foo.txt") возвращает foo.txt. [System.IO.Path]::GetFileNameWithoutExtension("c:\foo.txt") возвращает foo

Ответ 3

Вы можете получить желаемый результат.

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

Если вы используете "Get-ChildItem" для получения "полного имени", вы также можете использовать "имя", чтобы просто получить имя файла.

Ответ 4

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

Ответ 5

Использование BaseName в Get-ChildItem отображает имя файла, а с помощью Name - имя файла с расширением.

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

$filepath.BaseName

Basic-English-Grammar-1

$filepath.Name

Basic-English-Grammar-1.pdf