首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重命名-项目重命名问题

重命名-项目重命名问题
EN

Stack Overflow用户
提问于 2016-11-04 15:57:39
回答 1查看 470关注 0票数 2

我写了一些代码,第一次运行很好。但是,我现在已经用新的虚拟文件替换了这些文件,现在我得到了以下内容:

MyTestFile.zip改为MyTestFile_zip.zip_zip.zip MyTestFile.prd改为MyTestFile_prd.prd_prd.prd

下面是代码:

代码语言:javascript
复制
Get-ChildItem -Filter "*.prd" -Recurse | Rename-Item -NewName {$_.name -replace '.prd','_prd.prd'}
Get-ChildItem -Filter "*.zip" -Recurse | Rename-Item -NewName {$_.name -replace '.zip','_zip.zip'} 

有什么办法可以避免这个问题吗?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-04 16:05:34

-replace算子

  • 将正则表达式作为其第一个操作数,并且
  • 默认情况下执行子字符串匹配。

因此,您必须修改regex,这是替换的第一个操作数,以便按预期工作:

代码语言:javascript
复制
$_.Name -replace '\.prd$','_prd.prd' 
  • .被转义为\.,以确保-replace将其视为文字;如果没有\.将匹配任何字符。
  • $确保表达式锚定在输入的末尾,也就是说,只有在末尾匹配。

一个涵盖.prd.zip的更通用的重新表述

代码语言:javascript
复制
$_.Name -replace '\.(prd|zip)$','_$1.$1' 

请参见下面的解释。

如果我们把所有这些放在一起,我们就可以用一条管道逃脱:

代码语言:javascript
复制
Get-ChildItem -File *.prd, *.zip -Recurse | 
  Rename-Item -NewName { $_.Name -replace '\.(prd|zip)$','_$1.$1' }

正则表达式的使用允许您一次处理多个扩展,还允许您通过捕获组(括号大小的子表达式)引用正则表达式匹配(捕获)的部分内容,这些部分可以引用为$1 (第一个捕获组,.)在替换字符串中

代码语言:javascript
复制
> @( 'example.zip', 'example.prd' ) -replace '\.(prd|zip)$','_$1.$1'
example_zip.zip
example_prd.prd

注意替换字符串中的$1是如何引用捕获组(prd|zip)捕获的,第一个输入是zip,第二个是prd

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40426986

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档