Ответ 1
Если вы в порядке, включая расширение, это должно делать то, что вы хотите.
$outputPath = "D:\Server\User\CUST\MEA\Data\In\Files\CORRECTED\CUST_MEAFile.csv"
$outputFile = Split-Path $outputPath -leaf
Я хочу извлечь имя файла из нижеуказанного пути:
D:\Server\User\CUST\MEA\Data\In\Files\CORRECTED\CUST_MEAFile.csv
Теперь я написал этот код, чтобы получить имя файла. Это работает нормально, пока уровень папки не изменился. Но в случае изменения уровня папки этот код необходимо переписать. Я ищу способ сделать его более гибким, например, код всегда может извлекать имя файла независимо от уровня папки.
($outputFile).split('\')[9].substring(0)
Если вы в порядке, включая расширение, это должно делать то, что вы хотите.
$outputPath = "D:\Server\User\CUST\MEA\Data\In\Files\CORRECTED\CUST_MEAFile.csv"
$outputFile = Split-Path $outputPath -leaf
Используйте .NET:
[System.IO.Path]::GetFileName("c:\foo.txt")
возвращает foo.txt
.
[System.IO.Path]::GetFileNameWithoutExtension("c:\foo.txt")
возвращает foo
Вы можете получить желаемый результат.
$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" для получения "полного имени", вы также можете использовать "имя", чтобы просто получить имя файла.
$(Split-Path "D:\Server\User\CUST\MEA\Data\In\Files\CORRECTED\CUST_MEAFile.csv" -leaf)
Использование 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