从路径中提取文件名

use*_*481 53 powershell powershell-2.0

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

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

现在我写了这个代码来获取文件名.只要文件夹级别没有改变,这工作正常.但是如果文件夹级别已更改,则此代码需要重写.我正在寻找一种方法使其更灵活,例如代码总是可以提取文件名,而不管文件夹级别如何.

($outputFile).split('\')[9].substring(0)
Run Code Online (Sandbox Code Playgroud)

Gor*_*don 109

如果你可以包括扩展,这应该做你想要的.

$outputPath = "D:\Server\User\CUST\MEA\Data\In\Files\CORRECTED\CUST_MEAFile.csv"
$outputFile = Split-Path $outputPath -leaf
Run Code Online (Sandbox Code Playgroud)

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

ang*_*sen 38

使用:

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

  • .NET FTW!!这是最好的答案。谢谢 (2认同)

小智 9

在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
Run Code Online (Sandbox Code Playgroud)


Ian*_*emp 6

Get-ChildItem "D:\Server\User\CUST\MEA\Data\In\Files\CORRECTED\CUST_MEAFile.csv"
|Select-Object -ExpandProperty Name
Run Code Online (Sandbox Code Playgroud)


Lui*_*dez 6

使用通配符查找文件并获取文件名:

Resolve-Path "Package.1.0.191.*.zip" | Split-Path -leaf
Run Code Online (Sandbox Code Playgroud)


小智 5

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


J. *_*oes 5

只是为了完成Angularsen使用 .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 the extension:
$fileNameOnly = [System.IO.Path]::GetFileNameWithoutExtension("$FilePath")
Write-Host "fileNameOnly :" $fileNameOnly

# Get the file extension:
$fileExtensionOnly = [System.IO.Path]::GetExtension("$FilePath")
Write-Host "fileExtensionOnly :" $fileExtensionOnly
Run Code Online (Sandbox Code Playgroud)


pro*_*365 5

你可以试试这个:

[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
Run Code Online (Sandbox Code Playgroud)