my.file.xlsxなどからファイル名と拡張子を抽出する必要があります。ファイルまたは拡張子の名前がわからず、名前にドットがさらに含まれている可能性があるため、文字列を右から検索する必要があります。最初のドット(または左から最後)が見つかったら、その部分を抽出しますその点から右側と左側の部分。
多分より良い解決策がありますが、私はここや他のどこにも何も見つかりませんでした。ありがとうございました
my.file.xlsxなどからファイル名と拡張子を抽出する必要があります。ファイルまたは拡張子の名前がわからず、名前にドットがさらに含まれている可能性があるため、文字列を右から検索する必要があります。最初のドット(または左から最後)が見つかったら、その部分を抽出しますその点から右側と左側の部分。
多分より良い解決策がありますが、私はここや他のどこにも何も見つかりませんでした。ありがとうございました
回答:
ファイルがディスクから出てきており、他の人が述べているように、BaseName
およびExtension
プロパティを使用します。
PS C:\> dir *.xlsx | select BaseName,Extension
BaseName Extension
-------- ---------
StackOverflow.com Test Config .xlsx
文字列の一部としてファイル名が指定されている場合(たとえば、テキストファイルからのもの)、System.IO.PathクラスのGetFileNameWithoutExtension
とGetExtension
staticメソッドを使用します。
PS C:\> [System.IO.Path]::GetFileNameWithoutExtension("Test Config.xlsx")
Test Config
PS H:\> [System.IO.Path]::GetExtension("Test Config.xlsx")
.xlsx
[System.IO.Path] | Get-Member -Static
[System.IO.Path]::GetExtension
拡張子を返すことに注意してください。
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
テキストファイルからであり、推定名ファイルが空白で囲まれている場合、これは方法です。
$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
PS C:\Users\joshua> $file = New-Object System.IO.FileInfo('file.type')
PS C:\Users\joshua> $file.BaseName, $file.Extension
file
.type
分割パスを使用
$filePath = "C:\PS\Test.Documents\myTestFile.txt";
$fileName = (Split-Path -Path $filePath -Leaf).Split(".")[0];
$extension = (Split-Path -Path $filePath -Leaf).Split(".")[1];
Split(".")[-1]
名前にドットが含まれるファイルで機能するように変更できます
早くやれよ:
$file=Get-Item "C:\temp\file.htm"
$file.Basename
$file.Extension
$file.Basename
好奇心が強い人なら、これは改作です。RoboCopyがその整合性のために1つのファイルを複数のサーバーに正常にコピーしたかどうかをテストする必要がありました。
$Comp = get-content c:\myfile.txt
ForEach ($PC in $Comp) {
dir "\\$PC\Folder\Share\*.*" | Select-Object $_.BaseName
}
素晴らしくシンプルで、ディレクトリとその中のファイルが表示されます。1つのファイル名または拡張子を指定する場合は、*を必要なものに置き換えます。
Directory: \\SERVER\Folder\Share
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2/27/2015 5:33 PM 1458935 Test.pptx
PowerShell 6.0にSplit-Path
は、-Extenstion
パラメーターがあります。これはあなたができることを意味します:
$path | Split-Path -Extension
または
Split-Path -Path $path -Extension
以下のために$path = "test.txt"
両方のバージョンを返します.txt
終止符をinluding、。