2012-03-20 13 views
86

ファイル名と拡張子を抽出する必要があります。 my.file.xlsx。私はファイルや拡張子の名前を知らないし、名前の中にさらにドットがあるかもしれないので、右から文字列を検索する必要があります。そして、最初のドット(または最後から最後)を見つけたら、その点から左側にある部分との間に位置する。powershell - ファイル名と拡張子を抽出します。

もっと良い解決策があるかもしれませんが、私はここや他の場所で何かを見つけませんでした。

+0

エキステキストファイルからか、何から? –

+0

こんにちはキリスト教徒、私は私の質問を更新しました。私はファイルの名前からそれを抽出する必要があります。ありがとうございます – culter

答えて

125

ファイルがディスクをオフに来ていると他の人のように述べている場合は、BaseNameExtensionプロパティを使用します。あなたは、文字列の一部としてファイル名を与えられている場合(たとえば、テキストファイルからの

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

BaseName        Extension 
--------        --------- 
StackOverflow.com Test Config   .xlsx 

を誰でも好奇心旺盛である場合、これは、適応したものです

PS C:\> [System.IO.Path]::GetFileNameWithoutExtension("Test Config.xlsx") 
Test Config 
PS H:\> [System.IO.Path]::GetExtension("Test Config.xlsx") 
.xlsx 
+5

System.IO.Pathクラスのより便利なメソッドについては、MSDNのドキュメントを参照することなく、 '[System.IO.Path] | Get-Member -Static' – Phil

+0

'[System.IO.Path] :: GetExtension'は、ピリオド("。 ")*を含む拡張子*を返します。 –

11

テキストファイルからのものであり、そして名前のファイルを想定している場合は、この方法で空白に囲まれてありがとう:

$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 
7

FileInfoオブジェクトのBaseNameプロパティとExtensionプロパティを確認します。

+1

任意の特定のinfoyou'reの後に?ファイルをGet-Memberにパイプして、すべてのメンバーを公開するか、MSDNを参照して公式のヘルプを探してください。 –

0

:)、私はSystem.IO.PathクラスからGetFileNameWithoutExtensionGetExtension静的メソッドを使用します。

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

ForEach ($PC in $Comp) { 
    dir "\\$PC\Folder\Share\*.*" | Select-Object $_.BaseName 
} 
ニースとシンプルな

、そしてそれは、ディレクトリとその中のファイルを示しています。私はrobocopyをが正常にその完全性のために複数のサーバーにあるファイルをコピーしたかどうかをテストする必要がありました。 1つのファイル名または拡張子を指定する場合は、*を必要なものに置き換えます。

Directory: \\SERVER\Folder\Share 

Mode    LastWriteTime  Length Name                                    
----    -------------  ------ ----                                    
-a---   2/27/2015 5:33 PM 1458935 Test.pptx                            
18
PS C:\Windows\System32\WindowsPowerShell\v1.0>split-path "H:\Documents\devops\tp-mkt-SPD-38.4.10.msi" -leaf 
tp-mkt-SPD-38.4.10.msi 

PS C:\Windows\System32\WindowsPowerShell\v1.0> $psversiontable 

Name       Value 
----       ----- 
CLRVersion      2.0.50727.5477 
BuildVersion     6.1.7601.17514 
PSVersion      2.0 
WSManStackVersion    2.0 
PSCompatibleVersions   {1.0, 2.0} 
SerializationVersion   1.1.0.1 
PSRemotingProtocolVersion  2.1 
4
PS C:\Users\joshua> $file = New-Object System.IO.FileInfo('file.type') 
PS C:\Users\joshua> $file.BaseName, $file.Extension 
file 
.type 
4

使用分割経路

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

ちょうどそれを実行します。

$file=Get-Item "C:\temp\file.htm" 
$file.Name 
$file.Extension 
関連する問題