在批处理脚本中获取Powershell变量值

4

我想在批处理脚本中获取导出的PowerShell变量的值。以下是示例脚本。

sample.ps1

$myname="user1"

sample.bat

@echo on
FOR /F "delims=" %%i IN ('powershell . "D:\sample.ps1"; (Get-Variable myname).value') DO SET VAL=%%i
echo %VAL%
pause

在执行sample.bat时,我总是收到以下错误。
.value') was unexpected at this time.

但是,如果我在PowerShell中执行以下命令,就能够获得正确的输出。

. "D:\sample.ps1"; (Get-Variable myname).value

我想知道如何在批处理脚本中避免Get-Variable命令周围的括号。或者想知道在批处理脚本中获取导出的PowerShell变量值的其他方法。

请查看此帖是否符合您的需求。https://dev59.com/aHA75IYBdhLWcg3wOGPS - malexander
请纠正我,但是BAT脚本不是将\识别为转义字符吗? - Vish
根据我的理解,\ 只会被用作正则表达式模式的转义字符。请在此处查看:http://www.robvanderwoude.com/escapechars.php - vareda
是的,正确的 - 我运行了你的代码,无论是否使用 \ 转义字符都会出现错误。感谢指出这一点。 - Vish
有趣。我以为我几乎搞定了 - 至少在命令行中是这样的 - 但后来在BAT脚本中失败了。这就是我将所有的BAT脚本移植到Powershell的原因之一。完全值得努力! - Vish
显示剩余4条评论
2个回答

7

如果没有更多信息,我无法进行测试,但请查看以下内容:

@echo on
FOR /F "delims=" %%i IN ('"powershell . "D:\sample.ps1"; (Get-Variable myname).value"') DO SET VAL=%%i
echo %VAL%
pause

嗨@foxidrive,您能告诉我我们是否可以处理从PowerShell返回/导出的多个值,并将其保存在批处理文件中的多个变量中吗? - VSanka

0

将昨天添加的答案从评论部分移动。

我解决了它!我不仅要转义右括号,还要转义分号。在为右括号添加转义字符后,我遇到了不同的错误。

SET VAL=Get-Variable : Cannot find a variable with name 'myname'. 

工作命令如下...

FOR /F "delims=" %%i IN ('powershell . "D:\sample.ps1"^; (Get-Variable myname^).value') DO SET VAL=%%i

@foxidrive 谢谢您的回答,它也起作用了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接