J'ai un fichier de commandes pouvant être exécuté localement ou sur le serveur de construction pour faire une sorte de travail intéressant. Sur la machine locale, je veux Le contexte du serveur de construction peut être déterminé si une variable d'environnement spéciale existe ( mais, cela ne fonctionne pas, je reçois le @echo OFF code> de sorte que votre console ne soit pas pleine de chaînes de débogage. Sur le serveur de construction, je préférerais avoir
@echo sur code> afin que les défaillances puissent être étudiées.
TeamCity_Project_name code>). Alors, je pensais que je pouvais faire quelque chose comme p>
si code> déclaration a fait écho avec tout le reste ... toute pensée? p> p>
4 Réponses :
Eh bien, il semble que et ajouter votre conditionnel comme une autre instruction pour évaluer p> echo code> est activé par défaut, vous obtiendrez donc la sortie
si code> sortit de l'instruction, vous testez ce conditionnel. Vous devriez commencer par
La commande n'est pas réellement nommée Mais le problème qui provoque en fait que votre commande échoue à fonctionner comme prévu est que la commande de la première en général , la solution à cela est d'utiliser des parenthèses pour délimiter les limites de la commande. Cependant, étant donné que ECHO est activé par défaut et que vous voulez vraiment seulement supprimer si @echo code>. Le
@ code> est un drapeau facultatif valide au début d'une instruction pour indiquer que l'écho est supprimé pour cette déclaration. Ainsi, en utilisant le
@ code> sur chaque référence à la commande code> echo code> masquer la commande code> echo code> elle-même, mais pas le
si code> commande qui le précède.
echo code> slurp augmente le reste des jetons sur la ligne comme arguments, donc le
ele erfo off code> partie ne sera interprété pas par
cmd code>. Étant donné que cmd.exe écho par défaut, il imprime la commande
si code>, puis exécute une seule commande
echo code> ou rien. Étant donné que le
@ code> a signification au début de l'instructe qui est le corps du
si code>, aucune commande d'écho ne serait imprimée. P>
TeamCity_Project code> n'est pas défini, nous pouvons le dire directement. P>
C...>
C...>q17241089.bat
C...>rem this remark will echo
C...>if exist q17241089.bat () else
saw q17241089.bat
C...>if not exist q17241089.bat () else
bar
saw q17241089.bat
C...>
Merci d'avoir expliqué le @ code> plus en détail. J'ai lu les documents et mal interprétés comme un modificateur pour
echo code> seulement i>. Vous dites qu'il modifie la résolution par défaut des commandes sur la ligne totale i> droite?
Oui, vous pouvez commencer toute déclaration d'un fichier BAT avec @ code> et cette instruction ne sera pas échoée. Je vais mettre à jour ma réponse pour ajouter quelques détails que j'ai taquiné tout en essayant de trouver où cela est documenté (apparemment, ce n'est pas).
Ensemble de parenthèses (voir Docu ...):
IF DEFINED TEAMCITY_PROJECT_NAME (@ECHO ON) ELSE @ECHO OFF
Comme indiqué dans les réponses antérieures, ECHO est activé par défaut. Une autre manière d'atteindre le même comportement est la suivante:
@if "%TEAMCITY_PROJECT_NAME%" == "" @echo off
Le gère localement une occurrence fréquente et / ou est-ce mauvais i> le fonctionnement localement donne ces chaînes?
Il n'est pas couru fréquent, il me fait généralement tester des changements, et ce n'est pas mauvais i> d'avoir la sortie, mais je veux que ce soit sexy i>!