powershell - 重命名时跳过具有给定前缀的文件
问题描述
我有以下脚本用于重命名目录中的一堆文件,将目录的名称添加到它们的开头:
$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*
不会阻止已经以文件夹名作为前缀的文件被重命名。我在这里做错了什么?
解决方案
$_
仅当它用于管道的右侧时才有效,这意味着当您有一个项目集合并通过“$_”“管道”它们代表当前项目时。
由于您要排除的目录名称是静态的,您可以对其进行硬编码并用作排除过滤器。
$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 一起使用,这样您就知道在它发生之前会发生什么。
推荐阅读
- python - 如何在 Tkinter Python 中制作点击按钮?
- c# - 这个 web.config.transform 文件的目的是什么
- string - 如何在Matlab中获取不是字符串格式的相交函数的结果
- javascript - PHP - 读取文本文件的问题
- django - 使用本地文件验证 django 表单
- ruby - 在 Ruby on Rails 中定义 ActiveRecord 方法以处理不同的 ActiveRecord 关系
- ruby-on-rails - 运行迁移将公开模式添加到 structure.sql 中的 CREATE 语句
- python - Python DataFrame追加行删除最后一列
- javascript - 在获取期间捕获 UnhandledPromiseRejectionWarning
- javascript - 使用 JavaScript Object / JSON 使用父键基于子键返回其特定的子值