繁体   English   中英

Windows PowerShell批处理文件重命名

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM