powershell - extract file name and extension

前端 未结 9 891
温柔的废话
温柔的废话 2020-12-24 04:09

I need to extract file name and extension from e.g. my.file.xlsx. I don\'t know the name of file or extension and there may be more dots in the name, so I need to search the

相关标签:
9条回答
  • 2020-12-24 04:36

    As of PowerShell 6.0, Split-Path has an -Extenstion parameter. This means you can do:

    $path | Split-Path -Extension
    

    or

    Split-Path -Path $path -Extension
    

    For $path = "test.txt" both versions will return .txt, inluding the full stop.

    0 讨论(0)
  • 2020-12-24 04:38
    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
    
    0 讨论(0)
  • 2020-12-24 04:39

    If the file is coming off the disk and as others have stated, use the BaseName and Extension properties:

    PS C:\> dir *.xlsx | select BaseName,Extension
    
    BaseName                                Extension
    --------                                ---------
    StackOverflow.com Test Config           .xlsx  
    

    If you are given the file name as part of string (say coming from a text file), I would use the GetFileNameWithoutExtension and GetExtension static methods from the System.IO.Path class:

    PS C:\> [System.IO.Path]::GetFileNameWithoutExtension("Test Config.xlsx")
    Test Config
    PS H:\> [System.IO.Path]::GetExtension("Test Config.xlsx")
    .xlsx
    
    0 讨论(0)
  • 2020-12-24 04:42

    Use Split-Path

    $filePath = "C:\PS\Test.Documents\myTestFile.txt";
    $fileName = (Split-Path -Path $filePath -Leaf).Split(".")[0];
    $extension = (Split-Path -Path $filePath -Leaf).Split(".")[1];
    
    0 讨论(0)
  • 2020-12-24 04:43

    If is from a text file and and presuming name file are surrounded by white spaces this is a way:

    $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('.'))) }
    

    If is a file you can use something like this based on your needs:

    $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
    
    0 讨论(0)
  • 2020-12-24 04:50

    just do it:

    $file=Get-Item "C:\temp\file.htm"
    $file.Basename 
    $file.Extension
    
    0 讨论(0)
提交回复
热议问题