使用PowerShell将批处理脚本中的`set`语句替换为`setx`

时间:2015-09-04 19:23:58

标签: powershell

使用powershell,我想获取.bat文件并替换调用set的所有行以设置环境变量并将其更改为相应的setx调用。不幸的是,它并不像在文件上进行搜索和替换一样简单,而是将set替换为setx,因为语法不同:set ENVNAME=abc vs setx ENVNAME abc

在PowerShell中有一种简单的方法吗?要为set替换setx,我有:

(Get-Content $orig_filename ) | ForEach-Object {$_ -replace "set", "setx"} | Set-Content $new_filename

对于PowerShell新手的任何指针都将不胜感激。

2 个答案:

答案 0 :(得分:2)

进行了一些非常有限的测试,我不确定你的bat文件是什么样的,但这可能适合你。

(Get-Content $orig_filename ) | ForEach-Object {
    $_ -replace 'set (.*)\=(.*)','setx $1 $2'
} | Set-Content $new_filename

答案 1 :(得分:1)

您也可以将另一个invalid链接起来为您完成工作。还制作了>通过确保替换字符串开头的单词集,setx替换更容易出错。由于-replace用作数组运算符,因此您不需要需要 foreach循环。

-replace