0

我正在尝试根据文件名命名文件夹,在 powershell 中使用正则表达式。

这个名字看起来像这样tester2-2013-14-10.txt

有了那个文件名,我想创建一个名为tester2. 它将对目录中的所有文件执行此操作。基本上,正则表达式需要读取到第一个“-”,然后忽略所有其他字符。它

我正在尝试的所有正则表达式都没有做这样的事情。

这是我尝试使用的正则表达式(\w+)\.txt

这是我尝试实现它的时候:

Get-ChildItem | Where{$_.Name -match '(\w+)\.txt'} | ForEach-Object{
  md $matches[1]}

以及此类事物的其他变体。

看来,当我针对此正则表达式运行文件名时,它使用的是字符串的结尾。比如 的情况tester2-2013-14-10.txt。正在创建的文件夹名称被称为10而不是Tester2.

感谢帮助!

4

1 回答 1

2

尝试以下正则表达式

^(\w+)-.*\.txt

有关验证和说明,请参阅regex101 演示

简短的介绍

^匹配行或字符串的开头。它将确保匹配应该在一行的开头。

因此^(\w+)将匹配文件名中的第一个单词。然后它必须跟随-任何字符,直到.txt

你的正则表达式有什么问题?

(\w+)\.txt将匹配(\w+) 紧随其后的单词.txt

因此,您得到的是最后一个词而不是第一个词。

于 2013-10-14T19:01:36.657 回答