Ste*_*rtM 3 powershell windows-server-2012
我有一个大型文档库存储在 Sharepoint 服务器上,该文档库是从旧的 Access 数据库迁移过来的,这些文档的版本控制由用户控制,并在进行更改时附加在文件名末尾。
例如
我们现在使用 Sharepoint 来控制版本控制,并且需要删除文件名中的版本。
我通过以下脚本取得了一定的成功;
gi * | % { rni $_ ($_.Name -replace '(1.0)', '') }
Run Code Online (Sandbox Code Playgroud)
但我无法让它从文件名中删除括号。所以在我的测试目录中,文件更改为以下内容
Doc1-doc(1.0).doc ----- Doc1-doc().doc
数字范围从 1.0 到 4.5 左右,并且有超过 1200 个文档,因此我不介意为每个版本号使用单独的脚本。
您遇到的问题是 PowerShell-replace
使用正则表达式进行搜索。
这意味着()
搜索查询中的方括号 () 被解释为 RegEx捕获组。
在这种情况下,您希望将它们作为文字字符引用,因此需要转义括号。在正则表达式中,这是通过反斜杠 ( \
) 完成的。
所以-replace '\(1.0\)',''
应该这样做。
由于您使用的是正则表达式,因此您可以利用它并通过指定“数字”字符类或字符“集”而不是实际版本号作为搜索模式来一次性完成所有操作
所以像这样:
gi * | % { rni $_ ($_.Name -replace '\(1.[0-9]\)', '') }
(1.<any number from 0 to 9>)
将从文件名中删除。
如果您想删除括号以及它们之间的任何内容.
,您可以使用“任意字符 ( ) 任意次数 ( *
)”正则表达式模式:
IE:-replace '\(.*\)',''
注意:RegEx 可能会让您大吃一惊(在这种情况下,请考虑单个文件名中的外括号和内括号),因此请先备份文件并运行测试。:)
归档时间: |
|
查看次数: |
14499 次 |
最近记录: |