首页 > 解决方案 > 重命名时跳过具有给定前缀的文件

问题描述

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

$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 }

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

在此处输入图像描述

像这样之后

在此处输入图像描述

正如你所看到的,它或多或少地做了我想要的,除了这-exclude $_.DirectoryName*不会阻止已经以文件夹名作为前缀的文件被重命名。我在这里做错了什么?

标签: powershellpowershell-5.0

解决方案


$_仅当它用于管道的右侧时才有效,这意味着当您有一个项目集合并通过“$_”“管道”它们代表当前项目时。

由于您要排除的目录名称是静态的,您可以对其进行硬编码并用作排除过滤器。

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

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

还可以尝试将“-whatif”与 rename-item 一起使用,这样您就知道在它发生之前会发生什么。


推荐阅读