Comment concaténer les sorties de commande d'un fichier de commandes Windows
Je suis en train d'écrire un fichier de commandes Windows qui permet de purger les logs de plus de 90 jours. Comment puis-je concaténer les sorties de commandes de façon à ce qu'ils apparaissent dans une ligne? Je tiens aussi à ajouter cette sortie à un fichier plus tard. Mon fichier de commandes jusqu'à présent est:
@echo off
time /t && echo "--" && date /t && echo " -I- Purging " && FORFILES /P "D:\Logs" /M *.log /D -90 /C "cmd /c echo @file @fdate"
rem FORFILES that will purge the files
et ce sorties:
12:08
--
14/08/2012
-I- Purging
"<filename>" 02/08/2012
"<filename>" 30/07/2012
Comment concaténer ces sorties? Merci.
OriginalL'auteur TomaszRykala | 2012-08-14
Vous devez vous connecter pour publier un commentaire.
Si vous voulez concaténer les lignes dans la sortie, vous pouvez définir
CMD_STR
à votre commande souhaitée, et l'utilisation d'unfor /f
boucle, comme ceci:Itération de la boucle à travers les lignes de la sortie et ajoute un par un, à
CONCAT_STR
.Qui va le faire. Je vous remercie.
Ravi de vous aider. Pourquoi le
%%
?cmdline barfed "&& était inattendu en ce moment." sans elle. apparemment, toutes les variables dans des fichiers batch ont %%, et c'est le seul dans votre script qui n'ont pas.
Non, les variables doivent avoir un seul
%
. Le comportement que vous obtenez est probablement due à une autre raison: le lot interprète a de la difficulté à traiter avec&&
et donc vous avez besoin pour prévenirCMD_STR
de déroulage par s'échapper de la%
(avec%%
). Mais... tant que ça marche 🙂OriginalL'auteur Eitan T
De tout mettre sur une ligne, sauf pour la POUR la sortie, c'est facile. Vous avez juste besoin d'utiliser
la dynamique de l' %% et % % DATE% des variables au lieu de l'HEURE et la DATE des commandes
Si vous aussi vous voulez les noms de fichiers apparaissent sur la même ligne, alors vous pouvez utiliser une variable temp que EitanT suggéré. Mais qui limite le nombre de fichiers, ce qui peut tenir dans la max 8191 de taille variable. De traiter un nombre illimité de fichiers vous pouvez utiliser le SET /P à la place. Il ne semble pas que la FOR /F déclaration doit être nécessaire, mais il est un simple problème que je ne pouvais pas résoudre sans elle.
Il n'y a aucune raison de ne pas purger les fichiers en même temps que vous en dresser la liste. Depuis FORFILES est si lent, il serait beaucoup plus efficace que la purge et de la liste dans la même commande.
Mise à jour 2015-01-06
J'ai trouvé une solution sans l'aide DE /F.-je utiliser 0x22 pour joindre le SET /P invite dans les citations, je utiliser FINDSTR pour éliminer la ligne vide que FORFILES écrit avant toute demande de sortie.
Nice, mais vous avez raté le signe
0x5E
àset/p=0x5E0x22..
pour éviter les problèmes avec&
dans les noms de fichierbonne prise. Merci. J'ai mis à jour ma réponse.
OriginalL'auteur dbenham