使用powershell中的regex基于文件名命名文件夹

时间:2013-10-14 18:52:41

标签: regex powershell

我正在尝试使用powershell中的regex基于文件名命名文件夹。

该名称类似于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

感谢帮助!

1 个答案:

答案 0 :(得分:2)

尝试以下正则表达式

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

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

简短说明

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

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

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

(\w+)\.txt会立即匹配单词(\w+) ,然后是.txt

因此,您将获得最后一个词而不是第一个词。