将powershell文件中的值写入包装批处理文件的变量

时间:2015-08-24 12:49:37

标签: powershell batch-file

MyBatScript.bat:

PowerShell.exe "call MyPowershellScript.ps1"
%Tag% = NotSet
%CommitId% = NotSet

MyPowershellScript.ps1:

REM override the NotSet default value of tag and commitId defined in the MyBatScript.bat
$longVersion = git describe --long
$versionTokenList = $longVersion.Split('-')
%Tag% = $versionTokenList[0]
%CommitId% = $versionTokenList[-1]

我想将包装批处理文件调用的powershell脚本中的Tag和CommitId值写入2个批处理变量。

我该怎么做?目前上面的代码不起作用......

注意:我知道你们会问我为什么要将旧球棒与powershell混合使用。 我没有这样做......其他人的混乱我只需要修理垃圾,我真的需要这样做...感谢您的耐心和理解。

1 个答案:

答案 0 :(得分:0)

%varname%是变量的批处理语法。它在PowerShell脚本中无效。将值从PowerShell脚本返回到父批处理脚本的规范方法是回显PowerShell脚本中的值(例如,以分号分隔的字符串):

$longVersion = git describe --long
'{0};{1}' -f $longVersion.Split('-')[0,-1]

并在批处理脚本中使用循环处理输出:

@echo off

for /f "tokens=1,2 delims=;" %%a in (
  'PowerShell.exe -File "MyPowershellScript.ps1"'
) do (
  set "Tag=%%a"
  set "CommitId=%%b"
)