将大约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. ' }
我没有太多运气搞清楚保留字符的语法 - 我尝试\#
,#\
,'*#*'
,没有运气。
任何人都可以对此有所了解或提供一种快速方法来递归替换所有这些哈希标记吗?
感谢。
答案 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解析器足够聪明,可以找出你的意图。