替换Windows中子文件夹中的所有#in文件名

时间:2014-10-30 08:13:08

标签: windows powershell replace find

将大约200,000个文件迁移到OneDrive进行商业活动,并发现有一些他们不喜欢的角色 - 最大的犯罪者是#。我有大约3,000个带有哈希的文件,我想用No.替换它们。例如,旧:File#3.txt new:File No.3.txt

我尝试使用PowerShell脚本,但它也不像#

Get-ChildItem -Filter "*#*" -Recurse |
  Rename-Item -NewName { $_.name -replace '#',' No. ' }

我没有太多运气搞清楚保留字符的语法 - 我尝试\##\'*#*',没有运气。

任何人都可以对此有所了解或提供一种快速方法来递归替换所有这些哈希标记吗?

感谢。

1 个答案:

答案 0 :(得分:4)

Mode                LastWriteTime     Length Name       
----                -------------     ------ ----      
-a---        30.10.2014     14:58          0 file#1.txt
-a---        30.10.2014     14:58          0 file#2.txt

PowerShell使用Backtick(`)作为转义字符,并使用双引号来评估内容:

Get-ChildItem -Filter "*`#*" -Recurse |
Rename-Item -NewName {$_.name -replace '#','No.' } -Verbose

Get-ChildItem -Filter "*$([char]35)*" -Recurse | 
Rename-Item -NewName {$_.name -replace "$([char]35)","No." } -Verbose

两者都有效。

Get-ChildItem -Filter "*`#*" -Recurse | 
           Rename-Item -NewName {$_.name -replace "`#","No." } -Verbose

VERBOSE: Performing the operation "Rename File" on target 
"Item: D:\tmp\file#1.txt Destination: D:\tmp\fileNo.1.txt".
VERBOSE: Performing the operation "Rename File" on target 
"Item: D:\tmp\file#2.txt Destination: D:\tmp\fileNo.2.txt".

这也可行,

Get-ChildItem -Filter '*#*' -Recurse |
Rename-Item -NewName {$_.name -replace '#', 'No.'} -Verbose

VERBOSE: Performing the operation "Rename File" on target 
"Item: D:\tmp\file#1.txt Destination: D:\tmp\fileNo.1.txt".
VERBOSE: Performing the operation "Rename File" on target
"Item: D:\tmp\file#2.txt Destination: D:\tmp\fileNo.2.txt".

因为PowerShell解析器足够聪明,可以找出你的意图。