заменить переменные значением в командном файле - PullRequest
0 голосов
/ 02 января 2012

У меня есть командный файл, в котором установлена ​​переменная.Я хотел бы заменить каждую переменную со значением.

Например: мой пакетный файл выглядит следующим образом

Set Sourcefolder=..\..\Release
Set Variable2=/y /R
Set DestFolder=..\..\Output

XCopy %SourceFolder%\Comp1 %DestFolder%\Comp1 %Variable2%
...
...
..

Аналогично, в нем много строк.Я хотел бы заменить переменные значением.Например, вместо% SourceFolder% его следует заменить значением (.... \ release)

Как этого добиться?пакетный файл или скрипт Powershell предпочтительнее

Ответы [ 2 ]

2 голосов
/ 02 января 2012

Вот как бы я это сделал:

$script:variables=@{}
gc .\script.bat | %{ if($_ -match "^Set (.+?)=(.+)"){ $script:variables["$($matches[1])"] = $matches[2]}}

$evaluator ={
$group1 = $args[0].groups[1]
$script:variables["$group1"]
}

gc .\script.bat | %{ [Regex]::Replace($_,"%(.+?)%",$evaluator,[Text.RegularExpressions.RegexOptions]::none) } |
out-file .\script2.bat
1 голос
/ 02 января 2012

Попробуйте это:

$bat = switch -regex -file c:\test.bat
{
    '^set Sourcefolder=.+$' {'set Sourcefolder=....\release'}
    '^set Variable2=.+$' {'set Sourcefolder=/y /R'}
    '^set DestFolder=.+$' {'set Sourcefolder=..\..\Output'}
    '%SourceFolder%' {'....\release'}
    default {$_}
}

$bat | Out-File c:\test.bat
...