我需要從文件名中提取文件名和擴展名。 my.file.xlsx。我不知道文件或擴展名的名稱,名稱中可能有更多的點,所以我需要從右側搜索字符串,並且當我找到第一個點(或從左側的最後一個)時,提取該部分右側和該點左側的部分。powershell - 提取文件名和擴展名
也許有更好的解決方案,但我沒有找到任何東西在這裏或其他地方。謝謝
我需要從文件名中提取文件名和擴展名。 my.file.xlsx。我不知道文件或擴展名的名稱,名稱中可能有更多的點,所以我需要從右側搜索字符串,並且當我找到第一個點(或從左側的最後一個)時,提取該部分右側和該點左側的部分。powershell - 提取文件名和擴展名
也許有更好的解決方案,但我沒有找到任何東西在這裏或其他地方。謝謝
如果文件即將關閉磁盤,如其他人所說,使用BaseName
和Extension
屬性:
PS C:\> dir *.xlsx | select BaseName,Extension
BaseName Extension
-------- ---------
StackOverflow.com Test Config .xlsx
如果您指定的文件名作爲字符串的一部分(比如從一個文本文件來),我會使用GetFileNameWithoutExtension
和GetExtension
靜態方法從System.IO.Path類:
PS C:\> [System.IO.Path]::GetFileNameWithoutExtension("Test Config.xlsx")
Test Config
PS H:\> [System.IO.Path]::GetExtension("Test Config.xlsx")
.xlsx
對於System.IO.Path類中沒有提及MSDN文檔的更有用的方法,可以使用'[System.IO.Path] | Get-Member -Static' – Phil 2013-02-28 20:03:29
請注意,'[System.IO.Path] :: GetExtension'返回包含句號(「。」)*的擴展名*。 – 2016-05-08 13:15:35
如果是從一個文本文件,並且假定名的文件用空格這個被包圍的方式:
$a = get-content c:\myfile.txt
$b = $a | select-string -pattern "\s.+\..{3,4}\s" | select -ExpandProperty matches | select -ExpandProperty value
$b | % {"File name:{0} - Extension:{1}" -f $_.substring(0, $_.lastindexof('.')) , $_.substring($_.lastindexof('.'), ($_.length - $_.lastindexof('.'))) }
如果是一個文件,你可以使用像這樣根據您的需求:
$a = dir .\my.file.xlsx # or $a = get-item c:\my.file.xlsx
$a
Directory: Microsoft.PowerShell.Core\FileSystem::C:\ps
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 25/01/10 11.51 624 my.file.xlsx
$a.BaseName
my.file
$a.Extension
.xlsx
檢查FileInfo對象的BaseName和Extension屬性。
任何特定的信息後?只需將一個文件傳給Get-Member即可將其所有成員或成員瀏覽到MSDN以查找官方幫助。 – 2013-03-13 07:49:28
這是一種適應,如果有人好奇。我需要測試ROBOCOPY是否成功複製一個文件到多臺服務器用於其完整性:
$Comp = get-content c:\myfile.txt
ForEach ($PC in $Comp) {
dir "\\$PC\Folder\Share\*.*" | Select-Object $_.BaseName
}
尼斯和簡單,它顯示了目錄和裏面的文件。如果你想指定一個文件名或擴展名,只需將*替換爲你想要的。
Directory: \\SERVER\Folder\Share
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2/27/2015 5:33 PM 1458935 Test.pptx
PS C:\Windows\System32\WindowsPowerShell\v1.0>split-path "H:\Documents\devops\tp-mkt-SPD-38.4.10.msi" -leaf
tp-mkt-SPD-38.4.10.msi
PS C:\Windows\System32\WindowsPowerShell\v1.0> $psversiontable
Name Value
---- -----
CLRVersion 2.0.50727.5477
BuildVersion 6.1.7601.17514
PSVersion 2.0
WSManStackVersion 2.0
PSCompatibleVersions {1.0, 2.0}
SerializationVersion 1.1.0.1
PSRemotingProtocolVersion 2.1
PS C:\Users\joshua> $file = New-Object System.IO.FileInfo('file.type')
PS C:\Users\joshua> $file.BaseName, $file.Extension
file
.type
使用拆分路徑
$filePath = "C:\PS\Test.Documents\myTestFile.txt";
$fileName = (Split-Path -Path $filePath -Leaf).Split(".")[0];
$extension = (Split-Path -Path $filePath -Leaf).Split(".")[1];
只是做:
$file=Get-Item "C:\temp\file.htm"
$file.Name
$file.Extension
從文本文件或提取什麼? – 2012-03-20 14:17:56
嗨克里斯蒂安,我已經更新了我的問題。我需要從文件名中提取它。謝謝 – culter 2012-03-20 14:23:33