De Commande de Windows script batch pour ajouter un nom de fichier à la fin de chaque ligne dans une fusion de fichier texte
J'ai une nouvelle à la ligne de commande de windows scripts.
J'ai un fichier de commandes que j'utilise pour fusionner plusieurs fichiers texte dans un seul. Cependant, je veux pouvoir aussi ajouter le nom du fichier texte à la ligne vient de à la fin de chaque ligne dans le fichier fusionné.
C'est le script que je suis en train de travailler avec:
@ECHO OFF
ECHO Creating %1...
FOR /F "usebackq tokens=1" %%G IN (`DIR /B "C:\My Documents\Data\*.txt"`) DO
(
ECHO Adding %%G
ECHO. >> Output.txt
TYPE %%G >> Output.txt
)
Maintenant je sais que pour obtenir le nom de fichier dans le fichier de sortie-je besoin pour utiliser:
ECHO %%G >> Output.txt
Cependant, je ne suis pas sûr de comment je pourrais l'ajouter au script courant de sorte qu'il ajoute le nom de fichier à chaque ligne et je n'ai pas eu la chance de trouver des exemples.
OriginalL'auteur user2833396 | 2013-10-01
Vous devez vous connecter pour publier un commentaire.
Il est un simple de deux liner qui fonctionne à partir de la ligne de commande si vous êtes prêt à préfixe de chaque ligne avec le nom de fichier, au lieu de mettre le nom du fichier à la fin. Cette solution est extrêmement rapide.
Chaque ligne aura le format de
filename:line content
Il est important que votre fichier de sortie à utiliser une autre extension que les fichiers à fusionner. Sinon, vous courez le risque de la commande de traitement de sa propre production!
L'autre option est de s'assurer que la sortie passe à un dossier différent, peut-être le dossier parent:
Ou, si vous êtes prêt à inclure le chemin complet de chaque fichier de sortie, puis assurez-vous que répertoire courant n'est pas le même que celui de votre source, et l'utilisation
Le seul inconvénient de la solution ci-dessus est que les problèmes peuvent survenir si la dernière ligne d'un fichier texte ne se termine pas par un caractère de saut de ligne. Ce sera la cause de la première ligne du fichier suivant soit ajouté à la dernière ligne de l'état de la file. Quelque chose comme:
FILENAME1:last line without newlineFILENAME2:first line of next file
Un simple script peut ajouter une nouvelle ligne pour les fichiers manquants les saut de ligne à la dernière ligne. Ensuite, les fichiers peuvent être en toute sécurité fusionné avec le préfixe de nom de fichier sur chaque ligne:
OriginalL'auteur dbenham
Vous aurez besoin d'ajouter à chaque ligne dans le fichier individuellement:
Note dans l'avant-dernière ligne, le nom de fichier et la ligne est séparé par une
-
, vous pouvez le remplacer par n'importe quoi (n'oubliez pas de vérifier pour échapper les caractères) ou de se débarrasser de cette si vous le souhaitez.Je suis sûr que cela fonctionnera, mais si ça ne marche pas, dites-moi le message d'Erreur et je peux le corriger pour vous.
Mona
---- [edit:pw]
Proche - problème majeur était le
(
sur leFOR ... %%G
ligne a été sur la ligne suivante de laDO
- doit être sur la même ligne que leDO
./a-d
à laDIR
pour prévenir la sous-répertoire des noms correspondant à"usebackq tokens=1"
utiliser les classiques des devis et autoriser les espaces dans les noms de fichierscible de nom de répertoire à
sourcedir
variable et inclus%sourcedir%
dans les deuxFOR
états pour permettre l'exécution de n'importe où, sinon les fichiers trouvés dansC:\My Doc....
serait l'objet d'une recherche dans le répertoire courant pour la réplication dans la sortie.OP besoins pour changer la valeur attribuée à
sourcedir
àC:\My
Documents\Data
;
. Ces deux limites peuvent être résolus avec plus de code. Mais les lignes de longueurs sont limitées à ~8192 caractères avec un FOR /F lot de la solution. Il est aussi lent si il y a beaucoup de contenu.OriginalL'auteur Monacraft