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

Mar*_*son 10 powershell

我在powershell 2.0脚本中的变量中有一个绝对路径.我想剥离扩展,但保留完整的路径和文件名.最简单的方法吗?

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

我想回来

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

CB.*_*CB. 20

如果是一个[string]类型:

 $file.Substring(0, $file.LastIndexOf('.'))
Run Code Online (Sandbox Code Playgroud)

如果是一个[system.io.fileinfo]类型:

join-path $File.DirectoryName  $file.BaseName
Run Code Online (Sandbox Code Playgroud)

或者你可以施展它:

join-path ([system.io.fileinfo]$File).DirectoryName  ([system.io.fileinfo]$file).BaseName
Run Code Online (Sandbox Code Playgroud)


Ant*_*ios 11

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

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

  • 因为有更高效的解决方案而不是复杂的代码. (8认同)
  • 如果你在每一行旁边提供一些注释,显示确切的返回信息,那就太好了. (2认同)

Rom*_*min 5

# 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))
Run Code Online (Sandbox Code Playgroud)

  • 如果可以访问该文件,则还可以使用:`Get-Item $ yourpathvar | %{$ _。FullName -replace $ _。Extension}` (2认同)
  • 替换“ .1”后,在“ C:\ Tests.1 \ Test.1”中,我们将获得“ C:\ Tests \ Test”(不正确)。而且,是的,它存在,我刚刚创建了一个:) (2认同)
  • @David Martin建议使用另一种使用get-item的方法,但是文件必须存在:Get-Item $ file | %{join-path -path $ _。DirectoryName -ChildPath $ _。basename}`。值得将其作为单独的答案发布,但是@CB的版本非常相似,不需要存在文件并获得文件。 (2认同)

Ant*_*ean 5

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

PS> [System.IO.Path]::GetFileNameWithoutExtension($file)
Run Code Online (Sandbox Code Playgroud)

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

  • OP 询问如何获取没有扩展名的文件 _path_。这不这样做。相反,`::GetFileNameWithoutExtension()` 返回去除了路径和扩展名的文件名。 (3认同)