[英]Windows PowerShell Batch File Rename
目前,我手动浏览每个文件并使用通用重命名过程对其进行更新。
我只是开始尝试弄清楚如何使用Windows PowerShell来重命名具有共同结构的一堆文件。 问题是,我见过的所有示例都使用通用扩展替换某些内容。 我想删除扩展名后的所有内容,并且出现错误。
例子:
64244350.NSFM3V@.NO_BATCHES.20150108073838322
64244882.NSFM3V@.NO_BATCHES.20150108073534804
我希望它最终像是:
64244350.NSFM3V
64244882.NSFM3V
.NSFM3V是所有文件中的常见因素,但是前后存在随机性。 这是我在PowerShell中创建内容的第一次尝试:
Get-ChildItem *.NSFM3V* | Rename-Item -NewName {$_name -Replace *.{$_name}.*,""}
我的Get-ChildItem .NSFM3V可以从文件夹中获取所有文件,但无法重命名。
谢谢你的时间!
您可以这样做:
gci *.NSFM3V* | rename-item -newname { $_.name -replace '(.*)@.*', '$1' }
使用正则表达式获取@
的左侧并将其用于替换中。
gci
任何匹配项都将传递到管道,传递的对象将被赋予特殊变量$_
Rename-Item
从管道中获取对象$_
并使用{..}
的替换来制作新名称 -replace
内的正则表达式采用对象的name
属性并应用替换 (.*)
表示匹配任何内容 。 注意方括号,这些很重要,因为它们构成了一个捕获小组 @.*
表示匹配@
后跟任何内容 @
之后的所有内容 '$1'
是对捕获组的引用,因此从本质-NewName
,您将整个$_.name
-NewName
值替换为(最后一个) @
所有内容,并将其传递给-NewName
参数 一种不使用正则表达式方法的简单替代方法,这通常会使阅读/理解困难。
Get-ChildItem *.NSFM3V* | Rename-Item -NewName {($_.Name -split "@")[0]}
GJ干杯
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.