首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >清除文件名的Powershell脚本

清除文件名的Powershell脚本
EN

Stack Overflow用户
提问于 2022-08-17 05:26:07
回答 2查看 89关注 0票数 0

我有一个脚本,用于清理文件名,以匹配我喜欢的样式/格式。它的工作原理,但它有点丑陋,并做了一个循环的每一个变化。理想情况下,它会同时处理每个文件名的所有更改,然后继续到下一个文件名,而不是每次抓取gci。

有什么建议可以让这件事变得更加优雅/精简吗?谢谢!

代码语言:javascript
运行
复制
#need this for camel casing later
$Culture = Get-Culture
#Remove Other Tags
Get-ChildItem -Recurse | Rename-Item -NewName { $_.Name.Replace('(retail)','') }
Get-ChildItem -Recurse | Rename-Item -NewName { $_.Name.Replace('(epub)','') }
Get-ChildItem -Recurse | Rename-Item -NewName { $_.Name.Replace('(mobi)','') }
#Pad Dashes
Get-ChildItem -Recurse | Rename-Item -NewName { $_.Name.Replace('-',' - ') }
#Replace Underscores with Spaces
Get-ChildItem -Recurse | Rename-Item -NewName { $_.Name.Replace('_',' ') }
#Replace dots with space except for in the extension
Get-ChildItem -Recurse | Rename-Item -NewName { ($_.BaseName -replace '\.',' ') + $_.Extension }
#Rename to Camel Casecd 
Get-ChildItem -recurse | Rename-Item -NewName {$Culture.textinfo.totitlecase($_.FullName)}
Get-ChildItem -Recurse | Rename-Item -NewName { $_.Name.Replace(' .','.') }
Get-ChildItem -Recurse | Rename-Item -NewName { $_.Name.Replace('.Epub','.epub') }
Get-ChildItem -Recurse | Rename-Item -NewName { $_.Name.Replace('.Pdf','.pdf') }
Get-ChildItem -Recurse | Rename-Item -NewName { $_.Name.Replace('.Mp3','.mp3') }
Get-ChildItem -Recurse | Rename-Item -NewName { $_.Name.Replace('For','for') }
Get-ChildItem -Recurse | Rename-Item -NewName { $_.Name.Replace('And','and') }
Get-ChildItem -Recurse | Rename-Item -NewName { $_.Name.Replace('In','in') }
Get-ChildItem -Recurse | Rename-Item -NewName { $_.Name.Replace('On','on') }
Get-ChildItem -Recurse | Rename-Item -NewName { $_.Name.Replace('Of','of') }
Get-ChildItem -Recurse | Rename-Item -NewName { $_.Name.Replace('From','from') }
Get-ChildItem -Recurse | Rename-Item -NewName { $_.Name.Replace('To','to') }
Get-ChildItem -Recurse | Rename-Item -NewName { $_.Name.Replace(' A ',' a ') }
Get-ChildItem -Recurse | Rename-Item -NewName { $_.Name.Replace(' i',' I') }
Get-ChildItem -Recurse | Rename-Item -NewName { $_.Name.Replace('epubo O','epub') }
Get-ChildItem -Recurse | Rename-Item -NewName { $_.Name.Replace('Html','HTML') }
Get-ChildItem -Recurse | Rename-Item -NewName { $_.Name.Replace('Css','CSS') }
Get-ChildItem -Recurse | Rename-Item -NewName { $_.Name.Replace('Css','CSS') }
#Remove Double Spaces 
Get-ChildItem -Recurse | Rename-Item -NewName { $_.Name.Replace('  ',' ') }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-08-17 09:21:11

我知道可能尚未完成,但这可能是进一步改善的灵感;)

代码语言:javascript
运行
复制
Get-ChildItem -Recurse -Directory | 
ForEach-Object {
    $NewBaseName = $_.BaseName -replace '\(epub\)' -replace '\(mobi\)' -replace '\(retail\)'
    $NewBaseName = $NewBaseName -replace '-', ' - ' -replace '_', ' ' -replace '\.', ' ' -replace '\s+', ' '
    $NewBaseName = $NewBaseName.toLower() -replace 'epubo O', 'epub' -creplace 'html', 'HTML' -creplace 'css', 'CSS'
    $NewExtension = $_.Extension.toLower()
    $NewName = Join-Path -Path $_.Directory -ChildPath ($NewBaseName + $NewExtension)
    Rename-Item -Path $_.FullName -NewName $NewName
}

这样,您只遍历目录一次。这至少比你的方法要快。

票数 0
EN

Stack Overflow用户

发布于 2022-08-17 07:23:19

这里有一个建议,如果你认为它是优雅的:

代码语言:javascript
运行
复制
$hash = @{'(retail)' = ''; '(epub)' = ''; '(mobi)' = ''; 'And' = 'and' } #To be completed
    
$Culture = Get-Culture
$items = Get-ChildItem -Recurse
foreach ($item in $items) {
    $name = $item.Name
    foreach ($h in $hash.Keys) {
        $name = $name.Replace($h, $hash.$h)
    } 
    Rename-Item -Path $item.FullName -NewName $name
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73383251

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档