Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net powershell-提取文件名和扩展名_.net_Powershell_Powershell 2.0 - Fatal编程技术网

.net powershell-提取文件名和扩展名

.net powershell-提取文件名和扩展名,.net,powershell,powershell-2.0,.net,Powershell,Powershell 2.0,我需要从例如my.file.xlsx中提取文件名和扩展名。我不知道文件或扩展名的名称,名称中可能有更多的点,因此我需要从右侧搜索字符串,当我找到第一个点(或从左侧找到最后一个点)时,从该点提取右侧部分和左侧部分 也许有更好的解决办法,但我在这里或其他任何地方都没有找到任何东西。谢谢如果是来自文本文件,并且假定名称文件被空格包围,则这是一种方法: $a = get-content c:\myfile.txt $b = $a | select-string -pattern "\s.+\..{3,

我需要从例如my.file.xlsx中提取文件名和扩展名。我不知道文件或扩展名的名称,名称中可能有更多的点,因此我需要从右侧搜索字符串,当我找到第一个点(或从左侧找到最后一个点)时,从该点提取右侧部分和左侧部分


也许有更好的解决办法,但我在这里或其他任何地方都没有找到任何东西。谢谢

如果是来自文本文件,并且假定名称文件被空格包围,则这是一种方法:

$a = get-content c:\myfile.txt

$b = $a | select-string -pattern "\s.+\..{3,4}\s" | select -ExpandProperty matches | select -ExpandProperty value

$b | % {"File name:{0} - Extension:{1}" -f $_.substring(0, $_.lastindexof('.')) , $_.substring($_.lastindexof('.'), ($_.length - $_.lastindexof('.'))) }
如果是一个文件,您可以根据需要使用以下内容:

$a = dir .\my.file.xlsx # or $a = get-item c:\my.file.xlsx 

$a
    Directory: Microsoft.PowerShell.Core\FileSystem::C:\ps


Mode           LastWriteTime       Length Name
----           -------------       ------ ----
-a---      25/01/10    11.51          624 my.file.xlsx


$a.BaseName
my.file
$a.Extension
.xlsx

检查FileInfo对象的BaseName和扩展名属性。

如果文件是从磁盘发出的,并且如其他人所述,请使用
BaseName
扩展名属性:

PS C:\> dir *.xlsx | select BaseName,Extension

BaseName                                Extension
--------                                ---------
StackOverflow.com Test Config           .xlsx  
如果将文件名作为字符串的一部分(例如来自文本文件),我将使用类中的
GetFileNameWithoutExtension
GetExtension
静态方法:


如果有人好奇的话,这是一个改编。我需要测试RoboCopy是否成功地将一个文件复制到多个服务器以确保其完整性:

   $Comp = get-content c:\myfile.txt

ForEach ($PC in $Comp) {
    dir "\\$PC\Folder\Share\*.*" | Select-Object $_.BaseName
}
很好,很简单,它显示了目录和其中的文件。如果您想指定一个文件名或扩展名,只需将*替换为您想要的任何文件名或扩展名即可

    Directory: \\SERVER\Folder\Share

Mode                LastWriteTime     Length Name                                                                                                                                             
----                -------------     ------ ----                                                                                                                                             
-a---         2/27/2015   5:33 PM    1458935 Test.pptx                                                                                                             
使用分割路径

$filePath = "C:\PS\Test.Documents\myTestFile.txt";
$fileName = (Split-Path -Path $filePath -Leaf).Split(".")[0];
$extension = (Split-Path -Path $filePath -Leaf).Split(".")[1];
就这么做吧:

$file=Get-Item "C:\temp\file.htm"
$file.Basename 
$file.Extension
自PowerShell 6.0起,具有一个参数。这意味着您可以:

$path | Split-Path -Extension


对于
$path=“test.txt”
两个版本都将返回
.txt
,包括句号。

对于System.IO.path类中更有用的方法而不参考MSDN文档,可以使用
[System.IO.path]| Get Member-Static
注意
[System.IO.path]::GetExtension
返回包含句点(“.”)的扩展名。您要查找的任何特定信息?只需通过管道传输一个文件,让成员显示所有文件;s成员或浏览到MSDN以查找官方帮助。请注意,这仅在文件名中没有句点时才起作用。您可以更改为
Split(“.”[-1]
以使其与名称中带有点的文件一起工作。我想它应该是
$file.Basename
$filePath = "C:\PS\Test.Documents\myTestFile.txt";
$fileName = (Split-Path -Path $filePath -Leaf).Split(".")[0];
$extension = (Split-Path -Path $filePath -Leaf).Split(".")[1];
$file=Get-Item "C:\temp\file.htm"
$file.Basename 
$file.Extension
$path | Split-Path -Extension
Split-Path -Path $path -Extension