如何在PowerShell中获取没有扩展名的文件路径?

如何在PowerShell中获取没有扩展名的文件路径?,powershell,Powershell,我在powershell 2.0脚本中的变量中有一个绝对路径。我想去掉扩展名,但保留完整路径和文件名。最简单的方法是什么 因此,如果我在一个名为$file的变量中有C:\Temp\MyFolder\mytextfile.fake.ext.txt,比如说$file 我想回去 C:\Temp\MyFolder\mytextfile.fake.ext如果是[string]类型: $file.Substring(0, $file.LastIndexOf('.')) join-path $File.D

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

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

我想回去


C:\Temp\MyFolder\mytextfile.fake.ext
如果是
[string]
类型:

 $file.Substring(0, $file.LastIndexOf('.'))
join-path $File.DirectoryName  $file.BaseName
如果是
[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

您应该使用简单的.NET framework方法,而不是拼凑路径部分或进行替换

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

无论
$file
字符串
还是
文件信息
对象:

(Get-Item $file).BaseName

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

$FileNamePath
(获取项$FileNamePath)。扩展名
(获取项$FileNamePath).Basename
(获取项$FileNamePath)。名称
(获取项$FileNamePath)。目录名
(获取项目$FileNamePath)。全名

它是一种[字符串]类型。如果我想让它更健壮,并处理可变的扩展长度?如果我有一个
.pl
文件或
.blahblah
文件怎么办?
$file.Substring(0,$file.LastIndexOf('.'))
是一个好的文件。但请注意两种情况:1)没有扩展名,中间有一个点:“C:\Tests.1\FileNoExtension”导致“C:\Tests”;2) 没有点会导致异常。@RomanKuzmin你说得对。。。非常感谢。我希望阅读我答案的人也能阅读你的评论,并知道他的所有文件都有一个extesion或使用cast to[Fileinfo];)的代码如果您有权访问该文件,您也可以使用:
Get Item$yourpathvar |%{$\uu0.FullName-replace$\u0.Extension}
@Graimer:我认为这是不正确的。1)String <代码> $>。扩展< /代码>也可以在路径的中间。2) 它可能包含特殊的正则表达式字符,如
[]
。很抱歉,我没有在他的示例中看到隐藏的正则表达式字符。大多数人在分机中不使用特殊字符。关于你的观点,请给我一个示例,其中扩展位于路径的中间(存在)。我并不是说我的版本更好,只是一个更容易阅读的版本,供日常使用:)在“C:\Tests.1\Test.1”中替换“.1”后,我们将得到“C:\Tests\Test”(不正确)。是的,它是存在的,我刚刚创建了一个:)@David Martin建议使用
get item
的另一种方法,但该文件必须存在:
get item$file |%{join path-path$\ DirectoryName-ChildPath$\ basename}
。它值得作为一个单独的答案发布,但@C.B.的版本非常相似,不需要存在和获取文件。OP询问如何获取没有扩展名的文件路径。但事实并非如此。相反,
::GetFileNameWithoutExtension()
返回除去路径和扩展名的文件名。因为有更有效的解决方案,而不是复杂的代码。如果在每行旁边都提供一些注释,说明将返回的内容,那就太好了。这里的一个大缺点是,这要求文件存在。这要求文件实际存在。