gpt4 book ai didi

powershell - 重命名时跳过具有给定前缀的文件

转载 作者:行者123 更新时间:2023-12-03 00:59:52 26 4
gpt4 key购买 nike

我有以下脚本用于重命名目录中的一堆文件,并将目录名添加到它们的开头:

$s = "Y:\Teknisk Arkiv\Likeretter 111-Å1\E2_Kretsskjema\02_Likeretter styring\3AJJ000302-222"

Get-ChildItem -Path $s -Exclude $_.Directory.Name* | rename-item -NewName { $_.Directory.Name + '_' + $_.Name }

在运行脚本之前,文件夹中的文件看起来像这样

enter image description here

这样之后

enter image description here

如您所见,它或多或少地满足了我的要求,但 -exclude $_.DirectoryName*不会阻止已将文件夹名作为前缀的文件重命名。我在这里做错了什么?

最佳答案

管道中的

  • $_仅在非初始管道段中使用的脚本块内定义,该脚本块引用当前的输入对象,因此在Get-ChildItem命令中实际上是未定义的。
  • 即使$_.Directory.Name确实有一个值,$_.Directory.Name*也无法按预期工作,因为它将作为2个参数传递(您必须使用"$($_.Directory.Name)*"($_.Directory.Name + '*')
  • 相反,您想从$s输入路径中提取目录名称(可以使用Split-Path -Leaf完成),然后附加'*'
  • 为了使-Exclude有效,输入路径必须以\*结尾,因为-Include-Exclude过滤器(可能令人惊讶地)对-Path参数的叶子组件进行操作,而不对子路径进行操作(除非还指定了-Recurse)。

  • 放在一起:
    Get-Item -Path $s\* -Exclude ((Split-Path -Leaf $s) + '*') | 
    Rename-Item -NewName { $_.Directory.Name + '_' + $_.Name }

    我现在切换到 Get-Item,因为 \*现在用于枚举子级,但是 Get-ChildItem也可以使用。

    关于powershell - 重命名时跳过具有给定前缀的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57782470/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com