2012-01-02 6 views
0

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

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

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

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

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

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

+0

Почему вы хотите сделать это? И что ты пробовал? – manojlds

+0

Я пытаюсь преобразовать команды командного файла в команды Msbuild. Этот целевой файл исходного файла XCopy должен быть преобразован как . Я решил преобразовать его в Xml, но поскольку переменные должны быть изменены в 15 файлах. Я хотел бы автоматизировать его. – Samselvaprabu

ответ

2

Это, как я хотел бы сделать это:

$script:[email protected]{} 
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 
+0

чувак, действительно здорово. Например, я дал всего 2 переменные в вопросе. Но у моего скрипта много переменных ... но ваш скрипт работал как волшебство ... Из какой книги вы узнали приятеля Powershell? вы играете с регулярным выражением, как sachin tendulkar играет с bat – Samselvaprabu

+0

@Samselvaprabu - Lol, сравнивая меня с Sachin, как лучший комплимент, который я когда-либо получал :) – manojlds

+0

hi pude. когда я использую его с несколькими файлами, как следует за ним. Foreach ($ f in $ File) { $ script: variables = @ {} gc $ f.fullname | % {if ($ _ -match "^ Set (. +?) = (. +)") {$ script: variables ["$ ($ matches [1])"] = $ matches [2]}} $ оценщик = { $ group1 = $ args [0] .groups [1] $ script: variables ["$ group1"] } gc $ f.fullname | % {[Regex] :: Заменить ($ _, "% (. +?)%", $ Оценщик, [Text.RegularExpressions.RegexOptions] :: none)} | out-file ("E: \ copyforbuild \" + $ f.basename + "repl" + ". Txt") } – Samselvaprabu

1

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

$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 
+0

значения указаны приятель. например: Set Sourcefolder = .. \ .. \ Release Sourcefolder - это переменная, а значение задано в правой части. – Samselvaprabu

+0

Обновлен мой ответ –

+0

Приятель ваш ответ легко понять, но он не работает для этого случая. Возможно ли, чтобы вы работали над всеми переменными и значениями ?. (в ваших именах переменных ответа были жестко запрограммированы). Это будет полезно и легко понять ответ для многих других людей. заранее спасибо – Samselvaprabu

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