首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Powershell中将文件重命名为小写

在Powershell中将文件重命名为小写
EN

Stack Overflow用户
提问于 2010-09-29 22:44:47
回答 7查看 27.5K关注 0票数 25

我正在尝试使用Powershell2.0递归地重命名一堆文件。目录结构如下所示:

代码语言:javascript
复制
Leaflets
+ HTML
  - File1
  - File2
  ...
+ HTMLICONS
  + IMAGES
    - Image1
    - Image2
  - File1
  - File2
  ...
+ RTF
  - File1
  - File2
  ...
+ SGML
  - File1
  - File2
  ...

我使用以下命令:

代码语言:javascript
复制
get-childitem Leaflets -recurse | rename -newname { $_.name.ToLower() }

它似乎重命名了这些文件,但却抱怨其子目录:

代码语言:javascript
复制
Rename-Item : Source and destination path must be different.

我使用robocopy每月重新加载数据,但目录不会更改,因此我可以手动重命名它们。有没有办法让get-children跳过子目录(比如find Leaflets -type f ...)?

谢谢。

更新:看起来问题出在已经全是小写的文件上。我尝试将命令更改为:

代码语言:javascript
复制
get-childitem Leaflets -recurse | if ($_.name -ne $_name.ToLower()) rename -newname { $_.name.ToLower() }

但是现在Powershell抱怨说if不是cmdlet、函数等。我可以通过管道将get-childitem的输出转换为if语句吗?

更新2:这是可行的:

代码语言:javascript
复制
$files=get-childitem Leaflets -recurse
foreach ($file in $files)
{
    if ($file.name -ne $file.name.ToLower())
    {
        rename -newname { $_.name.ToLower() }
    }
}
EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2010-09-30 00:13:23

尽管你已经发布了你自己的答案,但这里有一个变体:

代码语言:javascript
复制
dir Leaflets -r | % { if ($_.Name -cne $_.Name.ToLower()) { ren $_.FullName $_.Name.ToLower() } }

以下是一些要点:

  • dir是Get-ChildItem的别名( ForEach-Object.
  • -cne的别名,-r是的缩写)区分大小写。Object Object忽略大小写differences.
  • $_是在for中引用当前项的方式每个对象loop.
  • renRename-Item.
  • FullName的别名可能更好,因为它可以确保您将访问正确的文件。

如果您不想重命名目录,可以包括如下内容:

代码语言:javascript
复制
if ((! $_.IsPsContainer) -and $_.Name -cne $_.Name.ToLower()) { ... }

希望这对继续学习和探索PowerShell有帮助。

票数 30
EN

Stack Overflow用户

发布于 2010-09-30 00:51:51

请记住,您可以通过管道直接重命名项目,并使用带有-NewName参数的脚本块(因为它还接受管道输入)来简化此任务:

代码语言:javascript
复制
Get-ChildItem -r | Where {!$_.PSIsContainer} | 
                   Rename-Item -NewName {$_.FullName.ToLower()}

和别名:

代码语言:javascript
复制
gci -r | ?{!$_.PSIsContainer} | rni -New {$_.FullName.ToLower()}
票数 17
EN

Stack Overflow用户

发布于 2013-10-15 22:41:14

对此稍作调整,如果您只想更新特定类型文件的名称,请尝试以下操作:

代码语言:javascript
复制
get-childitem *.jpg | foreach { if ($_.Name -cne $_.Name.ToLower()) { ren $_.FullName $_.Name.ToLower() } }

这只会将文件夹中的jpg文件小写,而忽略其余文件

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3822745

复制
相关文章

相似问题

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