【问题标题】:Rename all sub elements with incremental number用递增编号重命名所有子元素
【发布时间】:2019-01-18 23:58:28
【问题描述】:

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

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

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

【问题讨论】:

标签: powershell recursion rename


【解决方案1】:

Get-ChildItem -Path FolderPath -Filter *.smali -Recurse | ForEach-对象{$_ |重命名项目 -NewName ($.BaseName + StringToAdd + $.Extension) -WhatIf}

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

【讨论】:

  • 通过这些更改运行 Get-ChildItem -Filter *.sm ali -Recurse | ForEach-对象{$_ | Rename-Item -NewName ($_.BaseName me + 'a' + $_.Extension)} 但是我想完全删除旧文件名,所以我更喜欢这个:Get-ChildItem -Filter *.sm ali -Recurse | ForEach-对象{$_ |重命名项目 -NewName ("new_filename{0}.smali" -f $nr++) }
  • 虽然这段代码 sn-p 可以解决问题,including an explanation 确实有助于提高您的帖子质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。
  • 因为我不想保留旧文件名,所以我使用了块“new_filename{0}.smali”-f $nr++,它允许您创建多个名称为“fiename”的文件 +一个递增的数字
【解决方案2】:

dirGet-ChildItem 的别名,它有一个-Recursive 参数。

【讨论】:

    【解决方案3】:
    $nr = 0;    Get-ChildItem -Recurse -Filter "*.smali" | Rename-Item -NewName "new_filename$($nr++).smali"
    

    注意事项:

    DIR 是 Get-ChildItem 的别名。 Get-ChildItem 更像是 Powershell-y

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

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

    【讨论】:

    • 使用此代码我得到以下错误:重命名项目:参数不能与“路径”参数相关联,因为它是空的。在 raw:1 char:56 + Get-ChildItem -递归-过滤“*.smali”| Rename-Item $_ -NewName (" ... + ~~ + CategoryInfo : InvalidData: (:) [Rename-Item], ParameterBindingValidationException + FullyQualifiedErrorId : ParameterArgumentValidationErrorNu llNotAllowed,Microsoft.PowerShell.Commands.RenameItemCommand
    • 更新了将您的计数器初始化为第一条语句的命令,然后稍微更改了新名称的格式字符串。
    猜你喜欢
    • 2021-11-18
    • 2016-07-15
    • 2013-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-10
    • 2019-08-23
    • 1970-01-01
    相关资源
    最近更新 更多