我试图使用PowerShell 2.0递归地重命名一堆文件。目录结构如下:
Leaflets
+ HTML
- File1
- File2
...
+ HTMLICONS
+ IMAGES
- Image1
- Image2
- File1
- File2
...
+ RTF
- File1
- File2
...
+ SGML
- File1
- File2
...
我正在使用以下命令:
get-childitem Leaflets -recurse | rename -newname { $_.name.ToLower() }
看起来它已经重命名了文件,但是对于子目录会有投诉:
Rename-Item : Source and destination path must be different.
我每月使用robocopy重新加载数据,但是目录不会改变,所以我可以手动重命名它们。有没有办法让get-children
跳过子目录(就像find Leaflets -type f ...
这样)?谢谢。
更新:看起来问题出在已经全部小写的文件上。我尝试将命令更改为:
get-childitem Leaflets -recurse | if ($_.name -ne $_name.ToLower()) rename -newname { $_.name.ToLower() }
但现在 PowerShell 报错,显示 if
不是 cmdlet、函数等。我能将 get-childitem
的输出管道到 if
语句中吗?
更新2: 这个方法可行:
$files=get-childitem Leaflets -recurse
foreach ($file in $files)
{
if ($file.name -ne $file.name.ToLower())
{
rename -newname { $_.name.ToLower() }
}
}
Rename-Item
至少不会出错。但我不确定这种行为是从哪个版本开始改变的。但你第一次尝试将gci
管道传递到rename-item
现在可以工作了。 - codewario