有一个简单的任务一直困扰着我,我需要另外几双眼睛。我确定我错过了一些简单的东西。我们有一个包含各种特殊字符的文件目录,我需要删除那些只留下字母、数字、点(句点)和下划线字符。我在 PowerShell v2.0 脚本中使用正则表达式。
例如:
!foo12.log
变成foo12.log
foo1(bar)2.log
变成foo1bar2.log
[foo]bar_.log
变成foobar_.log
我的策略是使用和排除列表并将其他所有内容替换为""
. 考虑:
$bkpPath = "\\Server\foo"
gci $bkpPath | % {$_.name -replace "[^a-zA-z_0-9]",""}
当我运行它时,我最终得到了foo12log
,foo1bar2log
因此foobar_log
我将正则表达式更改为包含.
: [^a-zA-Z_\.0-9]
。这不会删除任何特殊字符。我也尝试过[^a-zA-Z_\[\]\(\)\.0-9]
与逃避一段时间时相同的结果。
我怀疑我逃到那个时期存在问题,\.
并且正则表达式将它作为通配符读取。如果这是怎么回事,我该如何解决?如果这不是发生了什么,我错过了什么?