【问题标题】:Removing part of filename删除部分文件名
【发布时间】:2017-04-08 14:52:04
【问题描述】:

我正在尝试删除特定字符后的部分文件名。我环顾四周,但似乎找不到合适的答案。 每个文件名都是唯一的,除了中间的 -。

当前文件名;

somefilename - somefilenamewithmore
somefilename123 - somefilenamewithmore123
somefilename5555 - somefilenamewithmore5555

我想要的;

somefilename 
somefilename123 
somefilename5555 


前置参考文件位于C:\users\%username%\rename

我找到了大量关于删除特定数量的字符或从文件名中删除特定内容的信息,但没有任何运气尝试删除某个字符之后的所有内容。

任何帮助/指针将不胜感激

【问题讨论】:

    标签: powershell rename


    【解决方案1】:
    Get-ChildItem C:\users\$env:username\rename -file | foreach {
      Rename-Item -Path $_.FullName -NewName ($_.Name.Split(' ')[0]) }
    

    如果有扩展名(如 .pdf 或其他),您可以将其编辑为:

    Rename-Item -Path $_.FullName -NewName ($_.Name.Split(' ')[0] + $_.Extension)
    

    另外,我不确定你是否想要当前的用户名,所以我最初没有改变你的路径,但是人们编辑了那部分,也许这样更有意义,我不确定;)

    【讨论】:

    • %username% 在这里不起作用,您可能想用$env:username 替换它。但仍然是一个有效的答案,因此被赞成。
    • 好吧,我不确定他指的是当前用户还是其他用户......这就是为什么我没有触及它
    • 谢谢你;由于我发现一些文件名有方括号,所以我不得不稍作改动,所以我将 -Path 更改为 -LiteralPath。
    【解决方案2】:
    $files = @(
        "somefilename - somefilenamewithmore",
        "somefilename123 - somefilenamewithmore123"
        "somefilename5555 - somefilenamewithmore5555"
    )
    
    $files | %{
        $_.Split("-")[0].Trim()
    }
    

    【讨论】:

      【解决方案3】:

      这里使用$env:USERPROFILE来确定路径的解决方案:

      Get-ChildItem (Join-Path $env:USERPROFILE 'rename') -file | ForEach-Object {
        Rename-Item -Path $_.FullName -NewName ('{0}{1}' -f ($_.Name -replace '([^-]*).*', '$1'), $_.Extension ) }
      

      【讨论】:

      • 再次使用你的疯狂正则表达式 ;)))
      猜你喜欢
      • 2017-09-16
      • 1970-01-01
      • 2017-12-23
      • 2014-03-08
      • 2023-04-01
      • 1970-01-01
      • 2017-04-01
      • 2023-03-10
      相关资源
      最近更新 更多