我的PowerShell 2.0腳本中有一個變量的絕對路徑。我想剝離擴展名,但保留完整路徑和文件名。最簡單的方法來做到這一點?如何在PowerShell中獲取沒有擴展名的文件路徑?
所以,如果我有C:\Temp\MyFolder\mytextfile.fake.ext.txt
在一個名爲變量,說$file
我想回到
C:\Temp\MyFolder\mytextfile.fake.ext
我的PowerShell 2.0腳本中有一個變量的絕對路徑。我想剝離擴展名,但保留完整路徑和文件名。最簡單的方法來做到這一點?如何在PowerShell中獲取沒有擴展名的文件路徑?
所以,如果我有C:\Temp\MyFolder\mytextfile.fake.ext.txt
在一個名爲變量,說$file
我想回到
C:\Temp\MyFolder\mytextfile.fake.ext
如果是一個[string]
類型:如果是[system.io.fileinfo]
$file.Substring(0, $file.LastIndexOf('.'))
類型:
join-path $File.DirectoryName $file.BaseName
,或者你可以將它轉換:
join-path ([system.io.fileinfo]$File).DirectoryName ([system.io.fileinfo]$file).BaseName
# the path
$file = 'C:\Temp\MyFolder\mytextfile.fake.ext.txt'
# using regular expression
$file -replace '\.[^.\\/]+$'
# or using System.IO.Path (too verbose but useful to know)
Join-Path ([System.IO.Path]::GetDirectoryName($file)) ([System.IO.Path]::GetFileNameWithoutExtension($file))
如果你有權訪問該文件,你也可以使用:'Get-Item $ yourpathvar | %{$ _。FullName -replace $ _。Extension}' –
@Graimer:我認爲這是不正確的。 1)字符串'$ _。Extension'也可能在路徑的中間。 2)它可能包含特殊的正則表達式字符,如'[]'。 –
對不起,我沒有在他的示例中看到隱藏的正則表達式字符。大多數人在擴展中不使用特殊字符。至於你的觀點,請向我展示一個樣本,其中的擴展名位於路徑中間(存在)。我不是說我的是更好的,只是一個更容易閱讀的版本,正常的一天使用:) –
你應該使用簡單的.NET框架的方法,而不是拼湊路部分或做更換。
PS> [System.IO.Path]::GetFileNameWithoutExtension($file)
OP詢問如何獲得沒有擴展名的文件_path_。這並不是那樣做的。相反,':: GetFileNameWithoutExtension()'返回路徑和擴展名的文件名。 – alx9r
無論$file
是否string
或FileInfo
對象:
(Get-Item $file).BaseName
這是我喜歡和最好的方式與其他的例子:
$FileNamePath
(Get-Item $FileNamePath).Extension
(Get-Item $FileNamePath).Basename
(Get-Item $FileNamePath).Name
(Get-Item $FileNamePath).DirectoryName
(Get-Item $FileNamePath).FullName
這是一個[字符串]類型。如果我想使它更加健壯並且能夠應對可變的擴展長度?如果我有'.pl'文件或'.blahblah'文件怎麼辦? –
@MarkAllison新增解決方案.. –
'$ file.Substring(0,$ file.LastIndexOf('。'))'是個不錯的選擇。但請注意2種情況:1)中間沒有擴展名和點:'C:\ Tests.1 \ FileNoExtension'結果爲'C:\ Tests'; 2)完全沒有點會導致例外。 –