Si tout ce que vous essayez de faire est de compter combien de fois un script cmd est appelé, vous pouvez simplement ajouter un caractère dans un fichier à chaque fois qu'il fonctionne plutôt que de jouer avec l'évaluation de l'expression à chaque fois que le script est exécuté. Cela a aussi l'avantage de rendre le script plus rapide puisque l'analyse du compte est déplacée ailleurs. Le fichier compteur se développe d'un octet à chaque fois, alors faites attention si vous l'appelez vraiment un grand nombre de fois depuis que le fichier va se développer. Mais même, en l'appelant une fois par seconde, un fichier 1G s'accumulera seulement après 30 ans.
En haut de votre script, vient de mettre:
set >>countfile.txt <nul: /p x=X
Cela ajoute simplement le caractère X
à la fin du fichier countfile.txt
chaque fois que le script est appelé. Il utilise la commande "set/p
" avec une redirection d'entrée/sortie, ce qui est le seul moyen dont je dispose pour sortir un caractère sans CR/LF (comme le "echo -n
" UNIX). Pour obtenir le nombre d'appels à ce jour, vous pouvez utiliser le modificateur de variable d'environnement de taille de fichier, comme dans le script suivant (je pense que cela sera fait moins souvent que d'exécuter le script, donc il vaut mieux mettre le travail grunt ici [en fait, il n'y a pas beaucoup de travail fastidieux car il est sans compter les personnages, plutôt obtient les informations directement à partir de l'entrée du répertoire]):
@echo off
goto :main
:getsize
echo %~z1
goto :eof
:main
setlocal enableextensions enabledelayedexpansion
call :getsize countfile.txt
endlocal
Pour réinitialiser le compteur, utilisez les touches suivantes extrêmement commande compliquée (je pense breveter ceci):
del countfile.txt
Une autre chose que je suggère - vous n'avez pas besoin de préfixer chaque commande avec "@
" pour éviter l'écho, vous pouvez simplement mettre "@echo off
" en haut de votre script pour le no-echo global. Si vous voulez faire écho sélectivement à certaines commandes, ignorez simplement ce paragraphe.
De rien. Pour ce cas, il y a la possibilité d'accepter une réponse :) – Joey