我想从以下路径中提取文件名:
D:\ Server \ User \ CUST \ MEA \ Data \ In \ Files \ CORRECTED \ CUST_MEAFile.csv
现在,我编写了这段代码来获取文件名。只要文件夹级别没有变化,此功能就可以正常工作。但是,如果文件夹级别已更改,则此代码需要重写。我正在寻找一种使其更灵活的方法,例如代码始终可以提取文件名,而与文件夹级别无关。
($outputFile).split('\')[9].substring(0)
Answers:
在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
您可以像这样获得想要的结果。
$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”仅获取文件名。
-1
如果您采用数组方法,只需使用索引:$file.Split("\")[-1]
只是为了完成使用.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
您可以尝试以下方法:
[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