代码之家  ›  专栏  ›  技术社区  ›  Orion Edwards

我可以在PowerShell中工作吗?

  •  122
  • Orion Edwards  · 技术社区  · 16 年前

    && 众所周知,在谷歌上很难找到,但我找到的最好的是 this article 它说要用 -and .

    不幸的是,它没有提供更多的信息,我也不知道该怎么办 -和 (再说一次,这是一件臭名昭著的难事)

    我试图在其中使用它的上下文是“执行命令1,如果成功,则执行命令2”,基本上是这样的:

    csc /t:exe /out:a.exe SomeFile.cs && a.exe
    

    这应该是一个简单的几个代表点谁知道,谢谢!


    编辑:如果只想在一行上运行多个命令,而不关心第一个命令是否失败,可以使用 ; 就我而言,这很好

    例如: kill -n myapp; ./myapp.exe .

    11 回复  |  直到 16 年前
        1
  •  106
  •   Jay Bazuzi Buck Hodges    16 年前

    在命令中,“&&”表示“执行命令1,如果成功,则执行命令2”。我用它来做一些事情,比如:

    build && run_tests
    

    在PowerShell中,最接近的方法是:

    (build) -and (run_tests)
    

    它具有相同的逻辑,但来自命令的输出文本将丢失。也许这对你来说已经足够好了。

    编辑

    如果您在脚本中执行此操作,那么最好将语句分开,如下所示:

    build
    if ($?) {
        run_tests
    }
    
        2
  •  27
  •   BoltClock    11 年前

    &&而且在要实现的事情列表中(仍然是),但并没有作为下一个最有用的事情出现。原因是我们有-和-或。 如果您认为这很重要,请提交一个关于Connect的建议,我们将考虑它用于v3。

        3
  •  10
  •   Ivan    11 年前

    试试这个:

    $errorActionPreference='Stop'; csc /t:exe /out:a.exe SomeFile.cs; a.exe
    
        4
  •  3
  •   Tomoyuki Aota    7 年前

    如果命令在cmd.exe中可用(例如 python ./script.py 但不是PowerShell命令 ii . (这意味着通过资源管理器打开当前目录)),您可以在PowerShell中运行cmd.exe。语法如下:

    cmd /c "command1 && command2"
    

    在这里, && 由所述的命令语法提供 in this question .

        5
  •  1
  •   Cleber Machado    8 年前

    我在PowerShell中尝试了以下命令序列:

    FISRT试验

    PS C:\> $MyVar = "C:\MyTxt.txt"
    PS C:\> ($MyVar -ne $null) -and (Get-Content $MyVar)
    True
    

    ($MyVar -ne $null) 返回 (Get-Content $MyVar) 还返回 .

    二次试验

    PS C:\> $MyVar = $null
    PS C:\> ($MyVar -ne $null) -and (Get-Content $MyVar)
    False
    

    ($myvar-ne$null) 返回 到目前为止,我必须假设 (获取内容$myvar) 还返回 .

    第三次试验证明第二个条件甚至没有分析。

    PS C:\> ($MyVar -ne $null) -and (Get-Content "C:\MyTxt.txt")
    False
    

    ($myvar-ne$null) 返回 证明了第二个条件 (Get-Content "C:\MyTxt.txt") 不跑,回来 总的来说。

        6
  •  0
  •   slugman    7 年前

    我认为一个简单的if语句可以实现这一点。有一次我看到mkelement0在最后一个退出状态上面的响应存储在$?,我将以下内容放在一起:

    # Set 1st command to variable
    $a=somecommand
    
    # Temp var to store exit status of last command (since we can't write to $?)
    $test=$?
    
    # Run Test
    if ($test=$true) { 2nd-command }
    

    因此,对于OP的例子,它是:

    a=(csc /t:exe /out:a.exe SomeFile.cs); $test = $?; if ($test=$true) { a.exe }
    
        7
  •  0
  •   mlapaglia    7 年前

    通常,在Linux上,我会执行如下操作: ruby -c learn.rb && foodcritic learn.rb

    但是,在Windows PS上,不能这样做!所以我最后只做了一个 .ps1 文件与此:

    Param(
      [string]$fileName
    )
    
    ruby -c $fileName
    foodcritic $fileName
    

    并称之为 bamemeril.ps1

    PS C:\Users\riotc> .\bamemeril.ps1 learn.rb
    Syntax OK
    Checking 1 files
    x
    FC011: Missing README in markdown format: ../README.md:1
    FC031: Cookbook without metadata.rb file: ../metadata.rb:1
    FC071: Missing LICENSE file: ../LICENSE:1
    PS C:\Users\riotc>
    
        8
  •  0
  •   TankorSmash    6 年前

    冗长的等价物是 $LASTEXITCODE -eq 0 :

    msbuild.exe args; if ($LASTEXITCODE -eq 0) { echo 'it built'; } else { echo 'it failed'; }
    

    我不知道为什么 if ($?) 不是我的工作,但这一个。

        9
  •  -1
  •   Matt Hamilton    16 年前

    这取决于上下文,但这里有一个“—和”的示例:

    get-childitem | where-object { $_.Name.StartsWith("f") -and $_.Length -gt 10kb }
    

    这就是在一个文件名以“f”开头的目录中获取所有大于10kb的文件。

        10
  •  -1
  •   Lydell Anderson    10 年前
    if (start-process filename1.exe) {} else {start-process filename2.exe}
    

    它比“&&”稍长一点,但在不编写脚本的情况下完成相同的任务,并且不太难记住。迟到总比不迟到好。:)

        11
  •  -1
  •   Cyberiron    8 年前

    我们可以尝试此命令,而不是使用&方法

    如果($lastexitcode-eq 0)ipconfig/all findstr/i bios catch echo err finally

    推荐文章