13

我的 powershell 2.0 脚本中的变量中有一个绝对路径。我想去掉扩展名,但保留完整的路径和文件名。最简单的方法是什么?

所以如果我有C:\Temp\MyFolder\mytextfile.fake.ext.txt一个名为的变量,比如说$file

我想回来

C:\Temp\MyFolder\mytextfile.fake.ext

4

5 回答 5

25

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
于 2013-02-08T10:37:23.457 回答
19

这是我喜欢的最佳方式和其他示例:

$FileNamePath
(Get-Item $FileNamePath ).Extension
(Get-Item $FileNamePath ).Basename
(Get-Item $FileNamePath ).Name
(Get-Item $FileNamePath ).DirectoryName
(Get-Item $FileNamePath ).FullName

于 2016-12-22T16:45:56.953 回答
6
# 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))
于 2013-02-08T10:40:12.300 回答
6

您应该使用简单的 .NET 框架方法,而不是将路径部分拼凑在一起或进行替换。

PS> [System.IO.Path]::GetFileNameWithoutExtension($file)

https://msdn.microsoft.com/en-us/library/system.io.path.getfilenamewithoutextension%28v=vs.110%29.aspx

于 2016-05-25T20:02:22.413 回答
2

不管$filestringFileInfo对象:

(Get-Item $file).BaseName
于 2016-12-01T15:06:32.640 回答