2013-05-09 3 views
1

В развертывании szenario мне нужно переименовать конфигурационные файлы. Существуют файлы конфигурации для каждой среды (Dev.Test, Dev.Prod, Integration, Prod). Например, web.config будет называться web.Dev.Test.config, если это было для среды Dev.Test. На целевой машине мне нужно переименовать файлы обратно в исходное имя (т. Е. Из web.Dev.Test.config в web.config) с помощью Powershell.Удалить подстроку из имени файла с помощью Powershell

$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 Evironment, но возвращает Прод вместо. Вот почему я ввел инструкцию if. Мне было интересно, есть ли более элегантный способ переименования файлов с Powershell.

ответ

1

Остерегайтесь жадного соответствия. Измените свое регулярное выражение, которое начинается ".*\.(?" до ".*?\.(?".

Смежные вопросы