我的 powershell 2.0 脚本中的变量中有一个绝对路径。我想去掉扩展名,但保留完整的路径和文件名。最简单的方法是什么?
所以如果我有C:\Temp\MyFolder\mytextfile.fake.ext.txt
一个名为的变量,比如说$file
我想回来
C:\Temp\MyFolder\mytextfile.fake.ext
我的 powershell 2.0 脚本中的变量中有一个绝对路径。我想去掉扩展名,但保留完整的路径和文件名。最简单的方法是什么?
所以如果我有C:\Temp\MyFolder\mytextfile.fake.ext.txt
一个名为的变量,比如说$file
我想回来
C:\Temp\MyFolder\mytextfile.fake.ext
if 是一个[string]
类型:
$file.Substring(0, $file.LastIndexOf('.'))
if 是一个[system.io.fileinfo]
类型:
join-path $File.DirectoryName $file.BaseName
或者你可以投射它:
join-path ([system.io.fileinfo]$File).DirectoryName ([system.io.fileinfo]$file).BaseName
这是我喜欢的最佳方式和其他示例:
$FileNamePath
(Get-Item $FileNamePath ).Extension
(Get-Item $FileNamePath ).Basename
(Get-Item $FileNamePath ).Name
(Get-Item $FileNamePath ).DirectoryName
(Get-Item $FileNamePath ).FullName
# 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))
您应该使用简单的 .NET 框架方法,而不是将路径部分拼凑在一起或进行替换。
PS> [System.IO.Path]::GetFileNameWithoutExtension($file)
不管$file
是string
或FileInfo
对象:
(Get-Item $file).BaseName