powershell从文件名中删除表情符号

时间:2018-08-30 10:01:03

标签: powershell filenames emoji

如何使用pwershell从文件名中找到删除表情符号? 喜欢和?

Get-ChildItem -recurse . | where {$_.Name -match "[\u1F600\u1F64F]"}

不起作用,因为似乎powershell无法处理utf32

问候, 比约恩

3 个答案:

答案 0 :(得分:1)

您可以从以下网站使用正则表达式:Emojis in Javascript。我尝试了几种不同的表情,看来效果很好。

正则表达式字符串:

(?:[\u2700-\u27bf]|(?:\ud83c[\udde6-\uddff]){2}|[\ud800-\udbff][\udc00-\udfff]|[\u0023-\u0039]\ufe0f?\u20e3|\u3299|\u3297|\u303d|\u3030|\u24c2|\ud83c[\udd70-\udd71]|\ud83c[\udd7e-\udd7f]|\ud83c\udd8e|\ud83c[\udd91-\udd9a]|\ud83c[\udde6-\uddff]|[\ud83c[\ude01-\ude02]|\ud83c\ude1a|\ud83c\ude2f|[\ud83c[\ude32-\ude3a]|[\ud83c[\ude50-\ude51]|\u203c|\u2049|[\u25aa-\u25ab]|\u25b6|\u25c0|[\u25fb-\u25fe]|\u00a9|\u00ae|\u2122|\u2139|\ud83c\udc04|[\u2600-\u26FF]|\u2b05|\u2b06|\u2b07|\u2b1b|\u2b1c|\u2b50|\u2b55|\u231a|\u231b|\u2328|\u23cf|[\u23e9-\u23f3]|[\u23f8-\u23fa]|\ud83c\udccf|\u2934|\u2935|[\u2190-\u21ff])

答案 1 :(得分:0)

您只需粘贴符号(在v5.1上运行);我想如果Windows可以解释它,那么PowerShell也可以。

Example

答案 2 :(得分:0)

表情符号在powershell中表示为该范围内的16位代理对。诸如0x1F600之类的代码太高而无法以16位表示,这正是powershell所使用的。表情符号实际上是2个字符长。个别地,它们是无法打印的。 -cmatch是一种预防措施,因为有几个Unicode字符的ascii范围为İ K。无论如何,不​​区分大小写-匹配unicode范围并没有什么意义。请注意,使用非ASCII字符编码的'utf8 no bom'脚本无法在Powershell 5中使用。

# U+D800 to U+DBFF (called "high surrogate") gets combined with another 
# Unicode code point from range U+DC00 to U+DFFF (called "low surrogate")

echo hi > file??
dir | where name -cmatch '[\uD800-\uDFFF]' | 
  rename-item -newname { $_.name -creplace '[\uD800-\uDFFF]' } -whatif

What if: Performing the operation "Rename File" on target "Item:
 C:\Users\js\foo\file?? Destination: C:\Users\js\foo\file".

Surrogate Pairs and Variation Selectors