我无法找到一个对我来说很清楚的答案。我正在更改目录中的一堆图像文件名,当我重命名它们时,它们都被重命名为image (1).png
image (2).png
以获得尽可能多的图像,然后我在power shell中运行它。
Dir | Rename-Item –NewName { $_.name –replace " ","_" }
这会找到空间并将其重命名为image_(1).png
image_(2).png
,这很容易,但是尝试更换括号会变得很麻烦。我试图摆脱他们看起来像这样image_1.png
image_2.png
,但是找到答案却真的很令人沮丧。
我希望我能写下来。
Dir | Rename-Item –NewName { $_.name –replace "\(*\)","*" }
或
Dir | Rename-Item –NewName { $_.name –replace "\([1-10]\)","[1-10]" }
或
Dir | Rename-Item –NewName { $_.name –replace "\(\W\)","\W" }
我尝试了所有这些,你会认为语法是有效的,但是没有:(所以我希望在正确的方向上稍微推动一下。
答案 0 :(得分:6)
我没有足够的SO Rep来评论您的问题所以我必须尝试回答。你需要逃脱你的反斜杠吗?即。替换
"\(*\)","" with "\\(*\\)",""
您的命令语法问题还是Regex本身?原始正则表达式看起来像这样:
^(?\<Name>.*)\((?<Number>\d*?)\)\.(?<Extension>.*$)
并替换为: $ {名称} _ $ {号码}。$ {扩展}
答案 1 :(得分:3)
怎么样:
Dir | Rename-Item –NewName { $_.name.replace(' ','_') -replace '[()]','' }
对于单个文字字符替换,字符串.replace()
方法更有效。使用-replace运算符进行更复杂的操作,您需要一次指定多个字符。
答案 2 :(得分:1)
无法在答案下发表评论,但这是一种摆脱“()”和其中的文本的方法。
Rename-Item –NewName { $_.name -replace "(\(\d+\))",""}
\(
和\)
对括号进行转义,使它们成为文字括号。未转义的括号将捕获的模式分组,以供以后参考,在这里您可能不需要使用括号。
希望这对某人有帮助。
答案 3 :(得分:0)
我做了两行
Dir |重命名项目–NewName {$ .name –替换“(”,“”}
Dir |重命名项–NewName {$ .name –replace“)”,“”}