使用Powershell从文件名中删除子字符串

时间:2013-05-09 05:22:52

标签: regex powershell rename

在部署szenario中,我需要重命名配置文件。每个环境都有配置文件(Dev.Test,Dev.Prod,Integration,Prod)。例如,如果是针对Dev.Test环境,则web.config将被称为web.Dev.Test.config。在目标机器上,我需要使用Powershell将文件重命名为其原始名称(即从web.Dev.Test.config重命名为web.config)。

$test = "web.Dev.Prod.config"
$environment = $test | Select-String -Pattern ".*\.(?<environment>(Dev.Test|Dev.Prod|Prod|Integration))\.config" | select -expand Matches | foreach {$_.groups["environment"].value} 
if ($test -match "Dev.Prod")
{
  $environment = "Dev.Prod"
}
$environment
$newFileName = $test.Remove($test.IndexOf($environment),$environment.Length + 1)
$newFileName

我遇到的问题是,Regex没有找到Dev.Prod环境,而是返回Prod。这就是我引入if语句的原因。我想知道是否有更优雅的方式使用Powershell重命名文件。

1 个答案:

答案 0 :(得分:1)

注意贪婪匹配。修改从".*\.(?"开始到".*?\.(?"的正则表达式。