等效于Powershell

25 浏览
0 Comments

等效于Powershell

在bash中,我使用./task1.sh && ./task2.sh来运行任务1,然后只要任务1没有返回错误代码,就运行任务2。当我在Powershell中尝试.\task1.bat && .\task2.bat时,我会收到错误信息"该版本中的Token &&不是一个有效的分隔符"。在Windows Powershell中是否有与&&等效的操作符?

0
0 Comments

问题的出现原因:作者想要在Powershell中找到与其他编程语言中的"&&"相等的操作符或方法。

解决方法:

根据作者的提问,我们可以推断出作者想要在Powershell中找到与其他编程语言中的"&&"操作符相等的方法。作者首先尝试了一个解决方案,其中他使用了一个分号来分隔两个命令,并使用了一个if语句来检查前一个命令的退出代码。如果退出代码为0,那么才会执行后面的命令。这个方法可以实现类似"&&"操作符的效果。

还有Powershell中的"-and"操作符,但是他指出它与其他语言中的"&&"操作符并不完全相同。

0
0 Comments

在PowerShell中,我们经常需要在执行某个命令或脚本之后检查其返回的结果,然后根据结果决定是否继续执行下一个命令或脚本。在其他编程语言中,我们通常可以使用逻辑运算符"&&"来实现此功能。然而,在PowerShell中,并没有直接对应的逻辑运算符。

上述代码中的".\task1.ps1"表示运行一个名为"task1.ps1"的脚本。紧接着的";"表示在执行完前一个命令之后继续执行下一个命令。"if($?)"是一个条件语句,其中"$?"表示上一个命令的执行结果。如果上一个命令执行成功(返回值为$true),则执行".\task2.ps1"脚本。

虽然上述代码可以实现类似"&&"的功能,但并不是一个优雅的解决方法。为了更好地模拟"&&"的功能,我们可以使用PowerShell中的"Piping"特性。

下面是一种更优雅的解决方法:

.\task1.ps1 | ForEach-Object { if($_){.\task2.ps1} }

在这个解决方法中,我们使用了"|"(管道符号)操作符来将"task1.ps1"的输出传递给"ForEach-Object"命令。"ForEach-Object"命令将会遍历"task1.ps1"的输出,并对每个输出进行处理。

在"ForEach-Object"命令的脚本块中,我们使用"$_"来表示当前处理的输出。"if($_)"表示如果当前处理的输出为$true,则执行"task2.ps1"脚本。

通过使用管道和ForEach-Object命令,我们可以更优雅地实现类似于"&&"的功能。这种方法更符合PowerShell的编程风格,并且更容易阅读和维护。

0