【问题标题】:How to replace a string in powershell?如何在powershell中替换字符串?
【发布时间】:2012-12-25 23:59:39
【问题描述】:

我需要从文件路径中提取文件扩展名。 例如:我有一个文件路径,如:

\\Test\data\data.dll

如何从文件路径中去掉data.dll,这样我就只得到

\\Test\data\

作为输出。

我尝试使用通配符 - *.但这没有用。

谢谢!

【问题讨论】:

    标签: string powershell replace


    【解决方案1】:

    只是为了解决@StephenMills 在他的回答中所说的问题的解决方法:

    PS C:\ps> ( [system.io.fileinfo]"J:\data\data.dll" ).FullName
    J:\data\data.dll
    PS C:\ps> ( [system.io.fileinfo]"J:\data\data.dll" ).BaseName
    data
    PS C:\ps> ( [system.io.fileinfo]"J:\data\data.dll" ).name
    data.dll
    PS C:\ps> ( [system.io.fileinfo]"J:\data\data.dll" ).DirectoryName
    J:\data
    

    【讨论】:

      【解决方案2】:

      这里有 2 种不同的方法。一种是使用拆分路径。另一种是使用 -replace 与正则表达式。它们都在 PowerShell V3 中运行良好,但如果路径中有驱动器号,但拆分路径在 V2 中不起作用,但您的系统没有该驱动器号。

      #Get Folder
      Split-Path '\\test\data\data.dll'
      '\\test\data\data.dll' -replace '\\[^\\]+$'
      
      #Get File 
      Split-Path '\\test\data\data.dll' -Leaf
      '\\test\data\data.dll' -replace '^\\.*\\'
      

      【讨论】:

      • 确保使用系统上没有的驱动器号,即 J:。然后,您可以执行以下操作来查看问题。 Split-Path 'J:\data\data.dll' 您将收到错误消息:“找不到驱动器。名称为 'J' 的驱动器不存在。”我很久以前在 connect.microsoft.com 上向他们报告过这个问题,但事实并非如此固定到 V3。 link
      • 感谢您的信息。你应该在你的答案中添加这个。没有多少人需要为不存在的驱动器拆分路径;)
      【解决方案3】:

      在您的情况下,有一个特殊的 cmdlet,默认情况下会在最后删除文件或文件夹。试试:

      $path =  \\test\data\data.dll
      #Get folderpath    
      Split-Path $path
      #Get filename only (thanks to Christian for tip)
      Split-Path $path -Leaf
      

      【讨论】:

      • Graimer:如果我想反之亦然怎么办.. 即,我如何只获取 data.dll 而不是之前的路径??
      • 测试更新的答案。如果它不起作用,请告诉我,我会在收到电脑后 30 分钟内修复它:)
      • @ashishg 对于文件名:Split-Path \\test\data\data.dll -Leaf
      • 那里,感谢克里斯蒂安的提示。清理答案以立即包含它:)
      • 是的,它有效.. 谢谢 Graimer :) Graimer 只是提到上一个问题,如果我有多个 sorces,你能告诉我如何阅读 DLL 和 PDB。例如:.\Projects\、.\Data\ 等
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-08
      • 2015-12-08
      • 2017-03-06
      • 1970-01-01
      • 2010-09-06
      • 2016-03-05
      • 2014-09-20
      相关资源
      最近更新 更多