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 '(.*)@.*', '' }
使用正则表达式获取 @
的左侧并将其用于替换。
解释:
- 来自
gci
的任何匹配都被传递到管道,传递的对象被赋予特殊变量 $_
Rename-Item
从管道中获取对象 $_
并使用 {..}
中的替换来制作新名称
-replace
中的正则表达式采用对象的 name
属性 并应用替换
(.*)
表示匹配 任何东西。注意括号,它们很重要,因为它们形成了一个 捕获组
@.*
表示匹配 @
后跟 anything
- 这意味着合并后,捕获任何内容,最多
@
,然后是任何内容
''
是对捕获组的引用,因此基本上您将整个 $_.name
值替换为(最后一个)@
之前的所有值并将其传递给 -NewName
参数
不使用正则表达式方法的简单替代方法 read/understand。
Get-ChildItem *.NSFM3V* | Rename-Item -NewName {($_.Name -split "@")[0]}
干杯,
GJ
目前,我手动浏览每个文件并使用常见的重命名程序更新它。
我刚刚开始尝试弄清楚如何使用 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 '(.*)@.*', '' }
使用正则表达式获取 @
的左侧并将其用于替换。
解释:
- 来自
gci
的任何匹配都被传递到管道,传递的对象被赋予特殊变量$_
Rename-Item
从管道中获取对象$_
并使用{..}
中的替换来制作新名称-replace
中的正则表达式采用对象的name
属性 并应用替换(.*)
表示匹配 任何东西。注意括号,它们很重要,因为它们形成了一个 捕获组@.*
表示匹配@
后跟 anything- 这意味着合并后,捕获任何内容,最多
@
,然后是任何内容 ''
是对捕获组的引用,因此基本上您将整个$_.name
值替换为(最后一个)@
之前的所有值并将其传递给-NewName
参数
不使用正则表达式方法的简单替代方法 read/understand。
Get-ChildItem *.NSFM3V* | Rename-Item -NewName {($_.Name -split "@")[0]}
干杯, GJ