&&
est notoirement difficile à rechercher sur Google, mais le meilleur que j'ai trouvé est cet article qui dit d'utiliser -and
.
Malheureusement, cela ne donne pas plus d'informations, et je ne peux pas savoir ce que je suis censé faire avec -and
(encore une fois, chose notoirement difficile à rechercher)
Le contexte dans lequel j'essaie de l'utiliser est "execute cmd1, et en cas de succès, exécutez cmd2", en gros ceci:
csc /t:exe /out:a.exe SomeFile.cs && a.exe
Cela devrait être un facile quelques points de rep à quelqu'un qui sait, merci!
Edit: Si vous voulez seulement exécuter plusieurs commandes sur une seule ligne et que vous ne vous souciez pas de savoir si la première échoue ou pas, vous pouvez utiliser ;
.
Par exemple: kill -n myapp; ./myapp.exe
.
Dans CMD, '&&' signifie "exécuter la commande 1 et, le cas échéant, exécuter la commande 2". Je l'ai utilisé pour des choses comme:
build && run_tests
Dans PowerShell, la chose la plus proche que vous puissiez faire est la suivante:
(build) -and (run_tests)
La logique est la même, mais le texte de sortie des commandes est perdu. Peut-être que c'est assez bon pour vous, cependant.
MODIFIER
Si vous faites cela dans un script, vous ferez probablement mieux de séparer les instructions, comme ceci:
build
if ($?) {
run_tests
}
&& et || étaient sur la liste des choses à mettre en œuvre (sont toujours) mais ne sont pas apparues comme la prochaine chose la plus utile à ajouter. La raison en est que nous avons -AND et -OU . Si vous pensez que cela est important, soumettez une suggestion sur Connect et nous l'examinerons pour la V3.
Essaye ça:
$errorActionPreference='Stop'; csc /t:exe /out:a.exe SomeFile.cs; a.exe
Si votre commande est disponible dans cmd.exe (quelque chose comme python ./script.py
mais pas une commande PowerShell comme ii .
(cela signifie que vous ouvrez le répertoire actuel avec Explorer)), vous pouvez exécuter cmd.exe dans PowerShell. La syntaxe est la suivante:
cmd /c "command1 && command2"
Ici, &&
est fourni par la syntaxe cmd décrite dans cette question .
Très vieille question, mais pour les nouveaux venus: peut-être que la version de PowerShell (similaire mais non équivalente) que la question recherche, est le point-virgule. Comme indiqué ci-dessus, la manière d'utiliser &&
sans perdre le résultat est la suivante:
build_command; run_tests_command
PS C:\> $MyVar = "C:\MyTxt.txt"
PS C:\> ($MyVar -ne $null) -and (Get-Content $MyVar)
True
($MyVar -ne $null)
a renvoyé true et (Get-Content $MyVar)
a également renvoyé true .
PS C:\> $MyVar = $null
PS C:\> ($MyVar -ne $null) -and (Get-Content $MyVar)
False
($MyVar -ne $null)
renvoyé false et jusqu'à présent, je dois supposer que le (Get-Content $MyVar)
a également renvoyé false .
PS C:\> ($MyVar -ne $null) -and (Get-Content "C:\MyTxt.txt")
False
($MyVar -ne $null)
a renvoyé false et a prouvé que la deuxième condition (Get-Content "C:\MyTxt.txt")
ne s'exécutait jamais en renvoyant false sur la commande entière.
Je pense qu'une simple déclaration peut accomplir cela. Une fois que j'ai vu la réponse de mkelement0 ci-dessus, le dernier statut de sortie est stocké dans $?
# 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 }
Donc, pour l'exemple de l'op, ce serait:
a=(csc /t:exe /out:a.exe SomeFile.cs); $test = $?; if ($test=$true) { a.exe }
Généralement, sous Linux, je ferais quelque chose comme: Ruby -c learn.rb && foodcritic learn.rb
Cependant, sur Windows PS, ne peut pas le faire! J'ai donc fini par créer un fichier .ps1
avec ceci:
Param(
[string]$fileName
)
Ruby -c $fileName
foodcritic $fileName
et l'a appelé 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>
Un équivalent prolixe est de combiner $LASTEXITCODE
et -eq 0
:
msbuild.exe args; if ($LASTEXITCODE -eq 0) { echo 'it built'; } else { echo 'it failed'; }
Je ne sais pas pourquoi if ($?)
n'a pas fonctionné pour moi, mais celui-ci l'a fait.