【问题标题】:Extract the filename from a path从路径中提取文件名
【发布时间】:2016-06-19 04:47:36
【问题描述】:

我想从下面的路径中提取文件名:

D:\Server\User\CUST\MEA\Data\In\Files\CORRECTED\CUST_MEAFile.csv

现在我编写了这段代码来获取文件名。只要文件夹级别没有改变,这就可以正常工作。但是如果文件夹级别已经改变,这段代码需要重写。我正在寻找一种使其更灵活的方法,例如无论文件夹级别如何,代码都可以始终提取文件名。

($outputFile).split('\')[9].substring(0)

【问题讨论】:

    标签: powershell powershell-2.0


    【解决方案1】:

    如果您对包含扩展名感到满意,这应该可以满足您的需求。

    $outputPath = "D:\Server\User\CUST\MEA\Data\In\Files\CORRECTED\CUST_MEAFile.csv"
    $outputFile = Split-Path $outputPath -leaf
    

    【讨论】:

    • 这是一个很好的答案。它以最“内置”的方式解决了问题。但是,出于我的需要,我需要带扩展名的文件名和基本文件名,所以我使用了@angularsen 的答案。还有另一个参数 -leafbase,但它仅在 PowerShell Core 6+ 上受支持。
    【解决方案2】:

    使用:

    [System.IO.Path]::GetFileName("c:\foo.txt") 返回foo.txt[System.IO.Path]::GetFileNameWithoutExtension("c:\foo.txt") 返回foo

    【讨论】:

    • .NET FTW!!这是最好的答案。谢谢?
    【解决方案3】:

    在 Get-ChildItem 中使用 BaseName 显示文件的名称,使用 Name 显示带有扩展名的文件名。

    $filepath = Get-ChildItem "E:\Test\Basic-English-Grammar-1.pdf"
    
    $filepath.BaseName
    
    Basic-English-Grammar-1
    
    $filepath.Name
    
    Basic-English-Grammar-1.pdf
    

    【讨论】:

      【解决方案4】:

      你可以像这样得到你想要的结果。

      $file = "D:\Server\User\CUST\MEA\Data\In\Files\CORRECTED\CUST_MEAFile.csv"
      $a = $file.Split("\")
      $index = $a.count - 1
      $a.GetValue($index)
      

      如果你使用“Get-ChildItem”来获取“fullname”,你也可以使用“name”来获取文件名。

      【讨论】:

      • 如果您采用数组方法,只需使用索引-1$file.Split("\")[-1]
      • 如果我们想删除扩展,我们该怎么办?
      【解决方案5】:
      $(Split-Path "D:\Server\User\CUST\MEA\Data\In\Files\CORRECTED\CUST_MEAFile.csv" -leaf)
      

      【讨论】:

        【解决方案6】:
        Get-ChildItem "D:\Server\User\CUST\MEA\Data\In\Files\CORRECTED\CUST_MEAFile.csv"
        |Select-Object -ExpandProperty Name
        

        【讨论】:

          【解决方案7】:

          只是为了完成上面使用 .Net 的答案。

          在此代码中,路径存储在 %1 参数中(在注册表中的引号下被转义:\"%1\")。要检索它,我们需要$arg(内置参数)。 不要忘记 $FilePath 周围的引用。

          # Get the File path:  
          $FilePath = $args
          Write-Host "FilePath: " $FilePath
          
          # Get the complete file name:
          $file_name_complete = [System.IO.Path]::GetFileName("$FilePath")
          Write-Host "fileNameFull :" $file_name_complete
          
          # Get File Name Without Extension:
          $fileNameOnly = [System.IO.Path]::GetFileNameWithoutExtension("$FilePath")
          Write-Host "fileNameOnly :" $fileNameOnly
          
          # Get the Extension:
          $fileExtensionOnly = [System.IO.Path]::GetExtension("$FilePath")
          Write-Host "fileExtensionOnly :" $fileExtensionOnly
          

          【讨论】:

            【解决方案8】:

            你可以试试这个:

            [System.IO.FileInfo]$path = "D:\Server\User\CUST\MEA\Data\In\Files\CORRECTED\CUST_MEAFile.csv"
            # Returns name and extension
            $path.Name
            # Returns just name
            $path.BaseName
            

            【讨论】:

              【解决方案9】:

              使用通配符查找文件并获取文件名:

              Resolve-Path "Package.1.0.191.*.zip" | Split-Path -leaf
              

              【讨论】:

                【解决方案10】:
                $file = Get-Item -Path "c:/foo/foobar.txt"
                $file.Name
                

                适用于相对路径和绝对路径

                【讨论】:

                  猜你喜欢
                  • 2010-10-01
                  • 1970-01-01
                  • 2011-04-28
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2011-12-08
                  相关资源
                  最近更新 更多