Powershell 使用递增编号重命名所有子元素

Powershell 使用递增编号重命名所有子元素,powershell,recursion,rename,Powershell,Recursion,Rename,我是powershell的新手,必须递归执行以下语句: Get-ChildItem | ForEach-Object {Rename-Item $_ -NewName ("new_filename{0}.smali" -f $nr++)} 换句话说,我必须使用与当前文件不同的任何其他名称重命名子目录中的所有.smali文件(保留.smali扩展名)。dir是Get ChildItem的别名,它有一个-Recursive参数 $nr = 0; Get-ChildItem -Recurse

我是powershell的新手,必须递归执行以下语句:

Get-ChildItem | ForEach-Object {Rename-Item $_ -NewName ("new_filename{0}.smali" -f $nr++)}

换句话说,我必须使用与当前文件不同的任何其他名称重命名子目录中的所有
.smali
文件(保留
.smali
扩展名)。

dir
Get ChildItem
的别名,它有一个
-Recursive
参数

$nr = 0;    Get-ChildItem -Recurse -Filter "*.smali" | Rename-Item -NewName "new_filename$($nr++).smali"
注意事项:

DIR是Get ChildItem的别名。Get ChildItem更强大

您的命令只查看顶级目录,因此我添加了-recurse


您的命令将重命名所有文件,而不仅仅是“*.smali”,因此我添加了过滤器。

Get ChildItem-Path FolderPath-filter*.smali-Recurse | ForEach对象{$| rename Item-NewName($.BaseName+StringToAdd+$.Extension)-WhatIf}


按原样复制上面的行。。。替换FolderPath和StringToAdd的值并尝试一下。如果一切正常,则通过删除-Whatif开关来执行它。

使用此代码,我得到以下错误:重命名项:参数不能与“Path”参数关联,因为它为null。。在raw:1 char:56+Get ChildItem-Recurse-Filter“*.smali”|重命名项$|-NewName(“…+~~+CategoryInfo:InvalidData:(:)[重命名项],Pa参数BindingValidationException+FullyQualifiedErrorId:ParameterArgumentValidationErrorNu llNotAllowed,Microsoft.PowerShell.Commands.RenameItemCommands将命令更新为初始化计数器作为第一条语句,然后稍微更改了新名称的格式字符串。通过这些更改,它将运行Get ChildItem-Filter*.smali-Recurse | ForEach对象{$| Rename Item-NewName($$.BaseNa me++'a'+$|扩展名)}但是我想完全删除旧文件名,所以我更喜欢这样:Get ChildItem-Filter*.sm ali-Recurse | ForEach对象{$| Rename Item-NewName(“new fil ename{0}.smali”-f$nr++)虽然这个代码片段可以解决这个问题,但它确实有助于提高您的文章质量。请记住,您是在为将来的读者回答这个问题,这些人可能不知道您的代码建议的原因。因为我不想保留旧文件名,所以我使用了块“new_fil ename{0}.smali“-f$nr++允许您创建多个名为“fiename”的文件+一个增量编号可能的副本