在 .bat 中使用 powershell 更改两行代码

Changing two lines of code with powershell in a .bat

我一直在关注这个 并且我在 .bat 中使用了这个代码:

powershell -Command "(gc -Raw test.py) -replace 'test = ''lol''`r`nlol = ''test''', 'test1 = ''lol1''`r`nlol2 = ''test2''' | Out-File test2.py"

它确实识别反引号 r 反引号 n 因为 if 替换了这个文件:

通过这个文件:

我的问题是在创建的文件中,我有反引号 r 反引号 n 而不是换行符。正常吗?我错过了什么吗?

我也尝试使用 \r\n 而不是反引号 r 反引号 n 并且发生了同样的事情(它被识别但是在输出文件中有 \r\n 而不是实际的换行符(我在 Windows 11).

您需要使用 double-quotes 作为转义序列,请参阅 about_Special_Characters

供您测试的示例:

$text = @'
test = 'lol'
lol = 'test'
'@

$text -replace "test = 'lol'\r?\nlol = 'test'", "test1 = 'lol1'`r`nlol2 = 'test2'"

至于你从批处理文件调用 powershell.exe,我相信这可行(你可以使用 "^"" 进行转义):

powershell -Command "(gc -Raw test.py) -replace "^""test = 'lol'\r?\nlol = 'test'""", """test1 = 'lol1'`r`nlol2 = 'test2'"^"" | Out-File test2.py"

调用 cmd 的所有功劳和所需的转义转到