如何从Powershell脚本向调用它的批处理文件返回多个值?
我有一个Powershell脚本,它返回多个值。我想从批处理文件中调用它,并将每个单独的值放入批处理文件中的单个变量中。
只能返回一个值
powershell代码(pstest.ps1):
$p1=11
$p2=22
$p3=33
exit
批处理文件:
powershell .\pstest.ps1
:: now I'd like to get those 3 returned values
:: into 3 individual variables so that I can do something like this:
@echo First is %p1%, Second is %p2%, Third is %p3%
因此,它应该显示以下内容:
First is 11, Second is 22, Third is 33
答案 0 :(得分:1)
您可以从任何应用程序中以完全相同的方式获得多个值:每行一个 ...
@echo off
setlocal EnableDelayedExpansion
set "i=0"
for /F "delims=" %%a in ('powershell "$p1=11; $p2=22; $p3=33; $p1; $p2; $p3"') do (
set /A i+=1
set "p!i!=%%a"
)
echo First is %p1%, Second is %p2%, Third is %p3%
我建议您阅读this answer关于数组 ...
答案 1 :(得分:0)
除了使用环境变量外,您还可以根据SachaDee的回答here尝试类似的方法:
PS:
function get-multiplereturnvalues {
"11"
"22"
"33"
}
get-multiplereturnvalues
BATCH / CMD
@echo First is %p1%, Second is %p2%, Third is %p3%
for /f "delims=" %%a in ('powershell .\multi.ps1') do @echo "$Value=%%a"
哪个输出:
"$Value=11"
"$Value=22"
"$Value=33"
答案 2 :(得分:0)
在PowerShell脚本中,我将使用结果创建一个临时文件。在批处理文件中,调用PowerShell脚本后,我将使用FOR / F解析该临时文件,以获取结果并根据需要设置环境变量。
答案 3 :(得分:0)
有关使用延迟扩展的更灵活的解决方案,该解决方案不需要使PowerShell脚本在一行上输出所有值并使用可变数量的输出,请参阅Aacini's helpful answer。
假定值的数量是固定的并且事先已知:
使PowerShell脚本输出一条单行,其中包含带有已知分隔符的所有值。。
在批处理文件中,使用for /f "delims=... tokens=..."
捕获离散循环变量中的值,您可以将其分配给常规变量。
一个简化的示例,该示例使用PowerShell命令生成具有3个值的单行输出,这些值由|
分隔(要将其应用于您的方案,请对您的-File
文件使用*.ps1
而不是带有命令字符串的-c
(-Command
):
@echo off
for /f "delims=| tokens=1,2,3" %%a in ('powershell -c " '11|22|33' "') do set "p1=%%a" & set "p2=%%b" & set "p3=%%c"
:: echo the values of the newly created variables
echo p1: [%p1%]
echo p2: [%p2%]
echo p3: [%p3%]
以上结果:
p1: [11]
p2: [22]
p3: [33]