Chaque fois que j'exécute le code code> ci-dessous, cela me survient que j'ai commis une erreur en utilisant les lignes Si Existe, comme si le répertoire existe ou non, il agit comme si la ligne n'était jamais là ... soit cela, soit cela ne lisant pas la ligne d'essence.
6 Réponses :
Si vous souhaitez exclure tout problème avec la pièce el / code>, essayez de supprimer le
el / code> et placez la commande sur une nouvelle ligne. Comme ceci:
Il y a un autre dans la langue de lots DOS? De retour dans l'époque où j'ai fait plus de ce genre de chose, il n'y avait pas.
Si ma théorie est correcte et que votre autre est ignoré, vous pouvez être mieux en train de faire P>
IF NOT EXIST C:\dir\NUL GOTO ...
Je travaille dans le script de lots Windows XP, pas sûr de DOS, mais cela fonctionne, mais cela fonctionne, a découvert mon erreur à cause de votre message, robvanderwoude.com/ntitif.php résume-le. Merci également pour la pointe nul pratique, il n'ya pas de fichier je peux vérifier de manière fiable.
Merci également à n'exister aucune ligne de sauvegarde, mais j'aime la façon dont je l'ai eu, comme je peux imaginer les étiquettes comme "pseudo bretelles"
Carl: La grande majorité des questions par lots sur ce site n'ont rien à voir avec DOS. Bien que de nombreuses personnes prétendent à tort, elles posent une question sur les fichiers DOS par lots, ils fonctionnent généralement tous sur Windows et signifient le processeur de commande Windows cmd.exe code>. La syntaxe est superficiellement similaire mais grandement étendue par rapport à ce que
Command.com code> était capable de. Simplement regrouper les deux ensemble dans une classe est tout simplement faux.
Command.com a été réécrit et appelé cmd.exe; Et divers solutions de contournement à des problèmes courants ont été boulonnés à un sous-ensemble des commandes. C'est bien sûr une question d'opinion, mais je nie que le changement de DOS d'Ancien est aussi dramatique que vous le faites. Cas d'affaire: ma connaissance antiquitée de la syntaxe DOS a aidé l'OP résoudre son problème.
Je reconnais cependant que la mention de DOS avait tort dans le contexte donné et déroutant inutilement à l'astucieux.
Utilisez des parenthèses pour regrouper les branches individuelles: dans votre cas, l'analyseur ne verra jamais le Aussi à l'aide de parenthèses vous permettra d'utiliser les déclarations directement sans avoir à sauter directement sans avoir à sauter autour de (Bien que je n'ai pas pu réécrire votre code pour utiliser réellement des techniques de programmation structurées; peut-être qu'il est trop tôt ou qu'il ne se prête pas bien de bloquer les structures car le code est en ce moment). P> P> sinon code> appartenant au
si Code> parce que
goto code> acceptera avec heurement tout jusqu'à la fin de la commande. Vous pouvez voir un problème similaire lors de l'utilisation de
echo code> au lieu de
goto code>. P>
Ce test ne distingue pas les fichiers et les répertoires.
@ Jaroslavzáruba: Cela fait, notez la barre oblique inverse.
C'est vrai, mon mauvais, j'ai testé les deux backslashes-and-dot conseillés dans d'autres réponses, mes excuses ... Imma retourner la uppote à vous ailleurs :)
de l'aide ( si /? code>):
Cela ne raconte pas toute l'histoire, cependant. Il n'est pas immédiatement évident que goto code> consomme la ligne complète au lieu d'un seul jeton. Il est documenté ici pour
del code> qui a du sens mais intuitivement je dirais que ce n'est pas évident pour
goto code>.
Si le del code> doit être résilié par une nouvelle ligne, existe-t-il une raison pour que tout autre commandement n'aurait pas également besoin d'être résilié par une nouvelle ligne?
La confusion déposée probablement «la clause d'autre doit se produire sur la même ligne que la commande après le si» je l'ai fait, et cela n'a pas fonctionné. Je n'ai pas compris au moment où l'utilisation des parens rendant la même ligne que si elle. Parce que d'une perspective non-programmation, ce sont des lignes différentes. Il y a des revers!
@echo off :START rmdir temporary cls IF EXIST "temporary\." (echo The temporary directory exists) else echo The temporary directory doesn't exist echo. dir temporary /A:D pause echo. echo. echo Note the directory is not found echo. echo Press any key to make a temporary directory, cls, and test again pause Mkdir temporary cls IF EXIST "temporary\." (echo The temporary directory exists) else echo The temporary directory doesn't exist echo. dir temporary /A:D pause echo. echo press any key to goto START and remove temporary directory pause goto START
Pour vérifier les répertoires, vous ne devez pas utiliser quelque chose comme:
if exist c:\windows\\.
Doit utiliser deux barres lorsque vous souhaitez vérifier si un répertoire existe, auquel cas il peut y avoir un fichier appelé "Windows" à la racine de la partition C:
Sur Windows 7 au moins, existe c: \ file \. Code> et
et
c: \ file \\. Code> sont tous deux true si le fichier est présent, donc cette pointe t Travailler pour moi. :-(
C'est tout simplement faux. Cette syntaxe ne se distingue pas entre un dossier ou un fichier. Si Existe C: \ Windows` fonctionne fréquemment, mais peut échouer s'il s'agit d'un point de jonction ou d'une liaison symbolique. Le code le plus simple qui semble toujours fonctionner est code> s'il existe C: \ Windows * `.
Autorisations vérifiées sur les répertoires?
Les autorisations vont bien, car les répertoires n'existent pas actuellement. Je ne suis pas encore inquiet pour la copie du réseau à ce jour.
Dans le deuxième groupe, vous manquez la directive
goto code>.
Goto Oldexistes d'autre OldexistsContinuer code>
Merci, remarqua que moi-même quand je les ai mis sur toutes les lignes suivantes.