&&众所周知难以在谷歌搜索,但我发现的最好的是这篇文章说要使用-and.
不幸的是它没有提供任何更多的信息,我无法找到我应该做的事情-and(再次,一个众所周知的难以搜索)
我正在尝试使用它的上下文是"执行cmd1,如果成功,执行cmd2",基本上这样:
csc /t:exe /out:a.exe SomeFile.cs && a.exe
Run Code Online (Sandbox Code Playgroud)
这应该是一个容易的几个代表谁知道,谢谢!
编辑:如果你只想在一行上运行多个命令,而你不在乎第一个是否失败,你可以使用;我的大多数用途这是好的
例如:kill -n myapp; ./myapp.exe.
在Bash中,我可以轻松地做类似的事情
command1 && command2 || command3
Run Code Online (Sandbox Code Playgroud)
这意味着运行command1,如果command1成功运行command2,并且command1无法运行command3.
什么是PowerShell中的等价物?
是否可以运行应用程序PowerShell并等待它完成?例如,我想运行Thunderbird并在用户关闭它之后,然后将某些内容输出到输出中?
第二件事 - 是否可以使用" thunderbird开始"菜单中的关键字搜索此应用程序(当我们手动输入时,它会返回结果Mozilla Thunderbird) - 并运行它?
谢谢 !
在Powershell中,我正在运行psftp.exe这是PuTTy的主页.我这样做:
$cmd = "psftp.exe"
$args = '"username@ssh"@ftp.domain.com -b psftp.txt';
$output = & $cmd $args
Run Code Online (Sandbox Code Playgroud)
这有效; 我正在打印出来$output.但它只捕获该变量中的一些输出(如"远程工作目录[...]")并将其他输出抛出到如下错误类型:
psftp.exe : Using username "username@ssh".
At C:\full_script.ps1:37 char:20
+ $output = & <<<< $cmd $args
+ CategoryInfo : NotSpecified: (Using username "username@ssh".:String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError
Run Code Online (Sandbox Code Playgroud)
这个"使用用户名......"等看起来像普通的FTP消息.如何确保所有输出都被输入$output?
我想从我在Powershell脚本中启动的进程捕获stdout和stderr,并将其异步显示到控制台.我已经通过MSDN和其他博客找到了一些关于这样做的文档.
创建并运行下面的示例后,我似乎无法异步显示任何输出.所有输出仅在进程终止时显示.
$ps = new-object System.Diagnostics.Process
$ps.StartInfo.Filename = "cmd.exe"
$ps.StartInfo.UseShellExecute = $false
$ps.StartInfo.RedirectStandardOutput = $true
$ps.StartInfo.Arguments = "/c echo `"hi`" `& timeout 5"
$action = { Write-Host $EventArgs.Data }
Register-ObjectEvent -InputObject $ps -EventName OutputDataReceived -Action $action | Out-Null
$ps.start() | Out-Null
$ps.BeginOutputReadLine()
$ps.WaitForExit()
Run Code Online (Sandbox Code Playgroud)
在这个例子中,我希望在程序执行结束之前在命令行上看到"hi"的输出,因为应该触发OutputDataReceived事件.
我已经尝试过使用其他可执行文件 - java.exe,git.exe等.所有这些都具有相同的效果,所以我不得不认为有一些我不理解或错过的简单.还需要做什么才能异步读取stdout?
我想知道是否有人知道有条件地执行程序的方法取决于前一个程序的退出成功/失败.如果program1在没有测试LASTEXITCODE变量的情况下成功退出,有没有办法在program1之后立即执行program2?我尝试使用-band和-and运算符无济于事,尽管我觉得它们无论如何都不会工作,最好的替代品是分号和if语句的组合.我的意思是,当在Linux上从源代码自动构建一个包时,&&运算符不能被打败:
# Configure a package, compile it and install it
./configure && make && sudo make install
Run Code Online (Sandbox Code Playgroud)
假设我实际上可以在PowerShell中使用相同的构建系统,PowerShell将要求我执行以下操作:
# Configure a package, compile it and install it
.\configure ; if ($LASTEXITCODE -eq 0) { make ; if ($LASTEXITCODE -eq 0) { sudo make install } }
Run Code Online (Sandbox Code Playgroud)
当然,我可以使用多行,将其保存在文件中并执行脚本,但其目的是简洁(保存击键).也许它只是PowerShell和Bash之间的区别(甚至是支持&&运算符的内置Windows命令提示符)我需要调整,但如果有更清洁的方法,我很想知道.
我有一个文件夹,.doc我想将其转换为.txt格式。如何在 Windows 7 中使用 LibreOffice 的命令行模式来做到这一点?这些文件位于C:\Temp\Test.
考虑以下函数:
function myFunction {
100
sleep 1
200
sleep 1
300
sleep 1
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,它将沿着管道一一发出这些值。
但我想等待所有值发出后再继续。喜欢
myFunction | waitForThePreviousCommandToComplete | Format-Table
Run Code Online (Sandbox Code Playgroud)
我希望上面的格式表接收整个数组,而不是一对一的项目。
在 Powershell 中是否可以实现?
我正在尝试获取主Powershell脚本来执行以下操作:
我的实际用例与以下类似,不同之处在于时间总是变化,ECHO "hi"仅在所有其他(3)命令完成后才发生(在这种情况下,我们知道它们将花费10000秒,但是在我的实际用例中,这种情况会有所不同)很多)。还要注意,尚不清楚这3个命令中的哪个命令每次花费的时间最长。
start powershell { TIMEOUT 2000 }
start powershell { TIMEOUT 3000 }
start powershell { TIMEOUT 10000 }
ECHO "hi"
Run Code Online (Sandbox Code Playgroud)
我可以看到(在这里)我可以&在命令前面放置一个命令,以便告诉powershell在完成后续命令之前要等到它完成为止。但是,我不知道如何使用3个同时命令
powershell ×9
asynchronous ×1
bash ×1
doc ×1
events ×1
exit-code ×1
libreoffice ×1
operators ×1
output ×1
syntax ×1
windows ×1
windows-7 ×1