我写了一些代码,第一次运行很好。但是,我现在已经用新的虚拟文件替换了这些文件,现在我得到了以下内容:
MyTestFile.zip改为MyTestFile_zip.zip_zip.zip MyTestFile.prd改为MyTestFile_prd.prd_prd.prd
下面是代码:
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'} 有什么办法可以避免这个问题吗?
谢谢
发布于 2016-11-04 16:05:34
-replace算子
因此,您必须修改regex,这是替换的第一个操作数,以便按预期工作:
$_.Name -replace '\.prd$','_prd.prd' .被转义为\.,以确保-replace将其视为文字;如果没有\,.将匹配任何字符。$确保表达式锚定在输入的末尾,也就是说,只有在末尾匹配。一个涵盖.prd和.zip的更通用的重新表述
$_.Name -replace '\.(prd|zip)$','_$1.$1' 请参见下面的解释。
如果我们把所有这些放在一起,我们就可以用一条管道逃脱:
Get-ChildItem -File *.prd, *.zip -Recurse |
Rename-Item -NewName { $_.Name -replace '\.(prd|zip)$','_$1.$1' }正则表达式的使用允许您一次处理多个扩展,还允许您通过捕获组(括号大小的子表达式)引用正则表达式匹配(捕获)的部分内容,这些部分可以引用为$1 (第一个捕获组,.)在替换字符串中
> @( 'example.zip', 'example.prd' ) -replace '\.(prd|zip)$','_$1.$1'
example_zip.zip
example_prd.prd注意替换字符串中的$1是如何引用捕获组(prd|zip)捕获的,第一个输入是zip,第二个是prd。
https://stackoverflow.com/questions/40426986
复制相似问题