从路径中提取文件名


83

我想从以下路径中提取文件名:

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

现在,我编写了这段代码来获取文件名。只要文件夹级别没有变化,此功能就可以正常工作。但是,如果文件夹级别已更改,则此代码需要重写。我正在寻找一种使其更灵活的方法,例如代码始终可以提取文件名,而与文件夹级别无关。

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

Answers:


164

如果可以添加扩展名,则可以执行所需的操作。

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

6
这是一个很好的答案。它以最“内置”的方式解决了问题。但是,出于我的需要,我需要带扩展名的文件名和基本文件名,因此我使用了@angularsen的答案。还有另一个参数-leafbase,但仅在PowerShell Core 6+上受支持。
杰米

62

采用

[System.IO.Path]::GetFileName("c:\foo.txt")返回foo.txt[System.IO.Path]::GetFileNameWithoutExtension("c:\foo.txt")退货foo


16

在Get-ChildItem中使用BaseName显示文件名,而使用Name显示带有扩展名的文件名。

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

$filepath.BaseName

Basic-English-Grammar-1

$filepath.Name

Basic-English-Grammar-1.pdf

4

您可以像这样获得想要的结果。

$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”获取“全名”,也可以使用“ name”仅获取文件名。


6
-1如果您采用数组方法,只需使用索引:$file.Split("\")[-1]
Ansgar Wiechers

如果要删除扩展名,我们该怎么办?
Souradeep Banerjee-AIS

4
Get-ChildItem "D:\Server\User\CUST\MEA\Data\In\Files\CORRECTED\CUST_MEAFile.csv"
|Select-Object -ExpandProperty Name

3

只是为了完成使用.Net的答案。

在此代码中,路径存储在%1参数中(该参数写在注册表中的转义的引号中\"%1\")。要检索它,我们需要$arg(内置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

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

3

您可以尝试以下方法:

[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


1
$file = Get-Item -Path "c:/foo/foobar.txt"
$file.Name

适用于两个相对绝对路径

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.