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

使用powershell将批处理脚本中的'set'语句替换为'setx',powershell,Powershell,使用powershell,我想获取一个.bat文件,并替换调用set的所有行,以设置环境变量并将其更改为相应的setx调用。不幸的是,这并不像对文件执行搜索和替换,为setx替换set那样简单,因为语法不同:set ENVNAME=abcvssetx ENVNAME abc 在powershell中有没有一种简单的方法可以做到这一点?只需为setx更换set,我有: (Get-Content $orig_filename ) | ForEach-Object {$_ -replace "set"

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

在powershell中有没有一种简单的方法可以做到这一点?只需为
setx
更换
set
,我有:

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

对于powershell新手的任何建议都将不胜感激。

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

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

做了一些非常有限的测试,我不确定你的bat文件是什么样子,但这可能对你有用

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

做了一些非常有限的测试,我不确定你的bat文件是什么样子,但这可能对你有用

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

做了一些非常有限的测试,我不确定你的bat文件是什么样子,但这可能对你有用

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

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

(Get-Content $orig_filename ) -replace "^set\b", "setx" -replace "="," " | Set-Content $new_filename

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

(Get-Content $orig_filename ) -replace "^set\b", "setx" -replace "="," " | Set-Content $new_filename

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

(Get-Content $orig_filename ) -replace "^set\b", "setx" -replace "="," " | Set-Content $new_filename

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

(Get-Content $orig_filename ) -replace "^set\b", "setx" -replace "="," " | Set-Content $new_filename

谢谢你的建议。意识到我想要做的事情有点复杂,因为我还需要考虑将
set ABC=
(to unset)转换为
setx ABC”“
。想一个不同的策略可能更容易,但仍然需要弄清楚:谢谢你的建议。意识到我想要做的事情有点复杂,因为我还需要考虑将
set ABC=
(to unset)转换为
setx ABC”“
。想一个不同的策略可能更容易,但仍然需要弄清楚:谢谢你的建议。意识到我想要做的事情有点复杂,因为我还需要考虑将
set ABC=
(to unset)转换为
setx ABC”“
。想一个不同的策略可能更容易,但仍然需要弄清楚:谢谢你的建议。意识到我想要做的事情有点复杂,因为我还需要考虑将
set ABC=
(to unset)转换为
setx ABC”“
。想一个不同的策略可能更容易,但仍然需要弄清楚: