无法在Powershell脚本中使用Get-Content尾部中断

时间:2019-06-24 07:58:52

标签: windows shell powershell batch-file jenkins

我有蝙蝠脚本,它在txt文件中写了几行。

set logfile=D:\my_job\out.txt
echo wwe >>%logfile%
echo wwe >>%logfile%
echo wwe >>%logfile%
echo wwe >>%logfile%
echo wwe >>%logfile%
echo wwe >>%logfile%
echo wwe >>%logfile%
echo wwe >>%logfile%
echo wwe >>%logfile%
echo wwe >>%logfile%
echo wwe >>%logfile%
echo wwe >>%logfile%
echo wwe >>%logfile%
echo wwe >>%logfile%
echo wwe >>%logfile%
echo wwe >>%logfile%
echo wwe >>%logfile%
echo wwe >>%logfile%
echo wwe >>%logfile%
echo wwe >>%logfile%
echo wwe >>%logfile%
echo wwe >>%logfile%
echo wwe >>%logfile%
echo wwe >>%logfile%
echo wwe >>%logfile%
echo wwe >>%logfile%
echo wwe >>%logfile%
echo wwe >>%logfile%
echo completed >>%logfile%
echo completeD >>%logfile%
echo wwe >>%logfile%
echo wwe >>%logfile%
echo wwe >>%logfile%
echo wwe >>%logfile%
echo wwe >>%logfile%
echo wwe >>%logfile%
echo wwe >>%logfile%
echo wwe >>%logfile%
echo ***Completed*** >>%logfile%
echo wwe >>%logfile%
echo wwe >>%logfile%

如果我看到***Completed***

,我就有停止执行工作的脚本
Get-Content D:\my_job\out.txt –Wait | ForEach-Object {$_ ; if($_ -eq "***Completed***"){break} }

但这不会停止我的工作执行。 另外,我尝试了这个:

Get-Content D:\my_job\out.txt –Wait | ForEach-Object {$_ ; if($_ -Match "***Completed***"){break} }

在输出中,我看到:

parsing "***Completed***" - Quantifier {x,y} following nothing.
At C:\Users\jenkins\AppData\Local\Temp\jenkins4007901642048080451.ps1:1 char:138
+ ... t -Wait | ForEach-Object {$_ ; if($_ -Match "***Completed***"){break} ...
+                                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : OperationStopped: (:) [], ArgumentException
    + FullyQualifiedErrorId : System.ArgumentException

能帮我吗,我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

此命令将在行的末尾添加一个空格:

 echo ***Completed*** >>%logfile%

所以您的支票$_ -eq "***Completed***"将失败。

要么删除echo中的空格,要么在比较字符串中添加空格。

关于-match的错误:它使用正则表达式操作,由于使用***Completed****是不正确的正则表达式。