Lors de la boucle dans le lot
Voici ce que je veux, à l'intérieur de la BACKUPDIR
, je veux exécuter cscript /nologo c:\deletefile.vbs %BACKUPDIR%
jusqu'à ce que le nombre de fichiers à l'intérieur du dossier est supérieur à 21(countfiles
le détient).
Voici mon code:
@echo off
SET BACKUPDIR=C:\test
for /f %%x in ('dir %BACKUPDIR% /b ^| find /v /c "::"') do set countfiles=%%x
for %countfiles% GTR 21 (
cscript /nologo c:\deletefile.vbs %BACKUPDIR%
set /a countfiles-=%countfiles%
)
- Alors, quelle est votre question? Ne ce lot de travail ou est votre problème qu'il est cassé?
Vous devez vous connecter pour publier un commentaire.
Ce sera mis en countfiles à 0. Je pense que vous voulez pour le diminuer par 1, donc l'utiliser à la place:
Je ne suis pas sûr si la boucle ne fonctionne, mieux essayer quelque chose comme cela:
Un
while
boucle peut être simulé danscmd.exe
avec:Par exemple, le script suivant:
sorties:
Pour votre cas particulier, je voudrais commencer par le suivant. Votre description est un peu déroutant. Je suis en supposant que vous voulez supprimer des fichiers dans ce répertoire jusqu'à il y a 20 ou moins:
while
, est-il une raison que vous l'avez nomméwhile1
?while
boucles dans le code. En réalité, vous pourriez très bien l'appeler ce que vous vouliez. Ce que j'ai est faire est de le rendre un peu plus détaillé afin de clarifier l'intention.sur le premier "jeu de countfiles" les 10 que vous voyez est le montant qu'il sera en boucle
l'echo salut est la chose que vous voulez boucle
...j'ai 5 ans de retard
C'était très utile pour moi, j'ai utilisé de la façon suivante pour ajouter un utilisateur dans active directory:
J'ai un truc pour ce faire, j'ai trouvé à faire, Tout en boucles sur les CLI, où il n'est pas possible d'utiliser les méthodes présentées ci-dessus.
J'appelle cela le "Faire Jusqu'à la Pause" loop:
C'est une boucle infinie, utile pour la surveillance, et vous pouvez les touches CTRL+C pour le casser quand vous le voulez.
Cependant, nous pouvons aussi faire un POUR rupture de boucle prématurément par la rencontre de certains types d'Erreurs (c'est à dire comme l'écriture d'un inexistante ou en lecture seule poignée)
Pour la transformer en une Boucle While
Nous ajouter un test pour nos résultats escomptés et ont le feu ce morceau de code lorsqu'une condition est remplie:
REMARQUE:
Tout
ECHO.>&3 >NUL
avait travaillé pour moi dans certains scénarios, j'ai joué avec cette et s'éteint au fil des ans et a constaté queDIR >&0 >NUL
était beaucoup plus cohérent.Je suis re-écrit cette réponse d'ici avant d'utiliser cette méthode à la place que j'ai récemment trouvé la vieille note à moi-même pour utiliser cette méthode à la place.
Édité le Post avec une meilleure Méthode Suit:
L' >NUL est facultatif, je préfère juste ne pas l'avoir sortie l'erreur.
Je préfère match en ligne lorsque possible, comme vous pouvez le voir dans cette aseptisé exemple d'une Commande que j'utilise pour surveiller LUN des Migrations sur notre VNX.
Aussi, j'ai une autre méthode que j'ai trouvé dans cette note à moi-même que je viens de re-testé pour confirmer fonctionne tout aussi bien à la CLI que l'autre méthode.
Apparemment, quand j'ai posté ici, j'ai posté une ancienne itération j'ai été jouer avec au lieu des deux plus récents qui fonctionnent mieux:
Dans cette méthode, nous utilisons
EXIT /B
à la sortie De la Boucle for, mais nous ne voulons pas sortir de la CLI afin de nous envelopper dans une session CMD:Parce que la boucle elle-même qui se passe dans la session CMD, on peut utiliser la SORTIE /B à la sortie de l'itération de la boucle sans perdre notre Session CMD, et, sans attendre la boucle complète, de même qu'avec l'autre méthode.
J'irais même jusqu'à dire que cette méthode est probablement la "destinée" de la méthode pour le genre de scénario où vous voulez briser une boucle for à la CLI, en utilisant CMD session est aussi la seule façon d'obtenir de l'expansion Retardée de travail à la CLI pour vos boucles, et le comportement et un tel comportement est clairement un flux de production prévu de quitter une session CMD.
IE: Microsoft a clairement fait un effort délibéré pour avoir CMD Exit /B Pour les boucles se comporter de cette manière, tandis que la "Destinée" façon de faire cela, comme mon autre méthode repose sur le fait d'avoir accidentellement créé juste le droit a l'erreur pour un coup de pied hors de la boucle sans laisser la boucle de terminer le traitement, dont je n'ai happenstantially découvert, et semble être la seule manière fiable de travail lors de l'utilisation de la commande DIR ce qui est assez étrange.
Donc, cela dit, je pense qu'il est probablement préférable d'utiliser la Méthode 2:
Bien que je soupçonne que la Méthode 1 est va être un peu plus rapide:
Et dans les deux cas, les deux devraient permettre, Tandis que les boucles que vous avez besoin pour votre application.