Я хочу извлечь имя файла из пути ниже:
D: \ Сервер \ Пользователь \ CUST \ MEA \ Data \ In \ Files \ CORRECTED \ CUST_MEAFile.csv
Теперь я написал этот код, чтобы получить имя файла. Это работает нормально, пока уровень папки не изменился. Но если уровень папки был изменен, этот код нужно переписать. Я ищу способ сделать его более гибким, например, код всегда может извлекать имя файла независимо от уровня папки.
($outputFile).split('\')[9].substring(0)
powershell
powershell-2.0
user664481
источник
источник
Использовать .сеть:
[System.IO.Path]::GetFileName("c:\foo.txt")
возвращаетсяfoo.txt
.[System.IO.Path]::GetFileNameWithoutExtension("c:\foo.txt")
возвращаетсяfoo
источник
Использование 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
источник
Вы можете получить желаемый результат вот так.
$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» для получения «полного имени», вы также можете использовать «имя», чтобы просто получить имя файла.
источник
-1
если вы используете метод массивов:$file.Split("\")[-1]
Get-ChildItem "D:\Server\User\CUST\MEA\Data\In\Files\CORRECTED\CUST_MEAFile.csv" |Select-Object -ExpandProperty Name
источник
Просто чтобы завершить ответ выше, используйте .Net.
В этом коде путь хранится в
%1
аргументе (который записывается в реестре под экранированной кавычкой:)\"%1\"
. Чтобы получить его, нам понадобится$arg
(встроенный аргумент). Не забывайте цитату вокруг$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
источник
$(Split-Path "D:\Server\User\CUST\MEA\Data\In\Files\CORRECTED\CUST_MEAFile.csv" -leaf)
источник
Вы можете попробовать это:
[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
источник
Найдите файл, используя подстановочный знак и получив имя файла:
Resolve-Path "Package.1.0.191.*.zip" | Split-Path -leaf
источник
$file = Get-Item -Path "c:/foo/foobar.txt" $file.Name
Работает как с относительными, так и с абсолютными путями
источник