如何将多个值从Powershell脚本返回到正在调用它的批处理文件?

时间:2019-06-12 21:46:57

标签: powershell batch-file

如何从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

4 个答案:

答案 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]