S'il EXISTE C:\directory\ goto un else goto b problèmes de windows XP fichiers batch
chaque fois que je lance le code
ci-dessous, il se produit pour moi, j'ai fait une erreur à l'aide de la s'il existe des lignes, comme peu importe si le répertoire existe ou pas, il agit comme si la ligne n'a jamais été là... ça ou pas la lecture de la ligne else.
echo off
echo
echo (c) Ryan Leach 2010
echo Stockmaster Backup System for exclusive use of Riverland Paper Supplies
echo
echo Please ensure that all computers are out of stock master to the windows xp screen
echo and that the backup usb with the day of the week labeled on it is inserted
pause
IF EXIST D:\RPS_BACKUP\backups_to_zip\ goto zipexist else goto zipexistcontinue
:zipexist
IF EXIST d:\RPS_BACKUP\backups_old\ rd /s /q D:\RPS_BACKUP\backups_old
echo backup did not complete last time, backup will restart from zip-usb phase.
pause
call zip
goto tidyup
:zipexistcontinue
IF EXIST D:\RPS_BACKUP\backups_old\ goto oldexists else oldexistscontinue
:oldexists
IF EXIST d:\RPS_BACKUP\backup_temp\ rename D:\RPS_BACKUP\backups_temp backups_to_zip
rd /s /q D:\RPS_BACKUP\backups_old
echo backup did not complete last time, backup will restart at the zip to usb phase.
pause
call zip
goto tidyup
:oldexistscontinue
IF EXIST D:\RPS_BACKUP\backups_temp\ goto tempexists else goto tempexistscontinue
:tempexists
IF EXIST D:\RPS_BACKUP\backups_old\ goto backupfailed else goto tempexistscontinue
:backupfailed
@rd /s /q D:\RPS_BACKUP\backups_temp
echo backup did not complete last time, backup will restart from start.
pause
:tempexistscontinue
md D:\RPS_BACKUPS\backups_temp
xcopy \\user1\c\* D:\RPS_BACKUP\backups_temp\user1\c /h /e /z /f /r /i /s /k
IF NOT ERRORLEVEL == 1 GOTO ErrorHandler
xcopy C:\* D:\RPS_BACKUP\backups_temp\user2\c /h /e /f /r /i /s /k
IF NOT ERRORLEVEL == 1 GOTO ErrorHandler
xcopy \\user3\c\* D:\RPS_BACKUP\backups_temp\user3\c /h /e /z /f /r /i /s /k
IF NOT ERRORLEVEL == 1 GOTO ErrorHandler
call sub
call zip
:tidyup
rename D:\RPS_BACKUP\backups_to_zip backups
pause
goto :eof
:ErrorHandler
echo xcopyerrorcode is ERRORLEVEL contact ryan
pause
- Vérifié les autorisations sur les répertoires?
- les autorisations sont belles, comme les répertoires n'existent pas. Je ne suis pas inquiet au sujet de la copie réseau encore.
- dans le deuxième groupe, il vous manque le
GOTO
directive.goto oldexists else oldexistscontinue
- merci, remarqué moi-même par la suite lorsque je met sur toutes les lignes suivantes.
Vous devez vous connecter pour publier un commentaire.
Utiliser des parenthèses pour regrouper les différentes branches:
Dans votre cas, l'analyseur ne jamais voir le
else
appartenant à laif
parce quegoto
sera heureux d'accepter tout jusqu'à la fin de la commande. Vous pouvez voir un problème similaire lors de l'utilisation deecho
au lieu degoto
.Également à l'aide de parenthèses vous permettra d'utiliser les instructions directement sans avoir à sauter partout (bien que je n'étais pas en mesure de réécrire votre code à fait utiliser des techniques de programmation; c'est peut-être trop tôt ou qu'il ne se prêtent pas bien à bloquer les structures comme le code est maintenant).
Si vous voulez règle tous les problèmes avec le
else
partie, essayez de supprimer leelse
et placez la commande sur une nouvelle ligne. Comme ceci:De l'aide (
if /?
):goto
consomme de la ligne complète au lieu d'un seul jeton. Il est documentée ici pourdel
ce qui est logique, mais intuitivement, je dirais que ce n'est pas évident pourgoto
.del
félicite doit être terminée par un retour à la ligne, est-il une raison que toute autre commande ne serait pas aussi besoin d'être terminée par un retour à la ligne?Il y a un AUTRE dans le DOS lot de langue? Retour dans les jours quand je n'ai plus de ce genre de chose, il n'y en avait pas.
Si ma théorie est correcte et votre RESTE est ignoré, vous pourriez être mieux de faire
...qui sera également vous faire économiser une ligne de code (celui qui est juste après votre SI).
Seconde, je me souviens vaguement une sorte de bug avec le test de l'existence de répertoires. La vie serait plus facile si vous pouviez tester l'existence d'un fichier dans ce répertoire. Si il n'y a pas de fichier, vous pouvez être sûr de, de tenter quelque chose (cette habitude de travailler jusqu'à Win95, IIRC) serait d'ajouter le nom de fichier de périphérique
NUL
à votre nom de répertoire, par exemplecmd.exe
. La syntaxe est superficiellement similaire mais très étendu par rapport à cecommand.com
était capable de faire. Simplement de regrouper les deux ensemble dans une classe est tout simplement faux.À vérifier pour les RÉPERTOIRES, vous ne devez pas utiliser quelque chose comme:
Pour fonctionner correctement utiliser:
notez le "." à la fin.
exist C:\file\.
etexist C:\file\\.
sont à la fois vrai si le fichier est présent, alors cette astuce ne fonctionne pas pour moi. 🙁if exist c:\windows` frequently works, but can fail if dealing with a junction point or symbolic link. The simplest code that seems to always work is
si existe c:\windows*`.