Lot de Supprimer une ligne dans un fichier texte?
Je suis en tirant mes cheveux à trouver un exemple simple de DOS fichier batch qui va supprimer la première ligne de plusieurs milliers de fichiers txt et enregistrez le fichier avec le nom de fichier d'origine. À la suite d'un processus de traitement par lots effectuée par un autre programme, j'ai ensuite AJOUTER la ligne supprimée ( une chaîne de caractères comprenant "X,Y,Z") au début de chaque fichier en suivant le traitement externe.
Donc, pour être plus clair, tout ce que vous voulez faire est de remplacer la première ligne de chacun de ces milliers de fichiers de texte avec la même ligne "X, Y, Z" (ou autre).
Nope, je suppose que l'autre problème qu'il mentionne exige que la première ligne n'est pas présente et après qu'il a couru, devrait être de nouveau ajoutés.
exactement. Les "autres logiciels" va s'étouffer avec la première ligne de "X,Y,Z", donc il doit être retiré, pour être readded quand les "autres logiciels" termine sa chose, qui va prendre des jours étant donné le nombre de fichiers d'entrée. Heureusement, j'ai déjà réussi à écrire un lot pour cette tâche.
Nope, je suppose que l'autre problème qu'il mentionne exige que la première ligne n'est pas présente et après qu'il a couru, devrait être de nouveau ajoutés.
exactement. Les "autres logiciels" va s'étouffer avec la première ligne de "X,Y,Z", donc il doit être retiré, pour être readded quand les "autres logiciels" termine sa chose, qui va prendre des jours étant donné le nombre de fichiers d'entrée. Heureusement, j'ai déjà réussi à écrire un lot pour cette tâche.
OriginalL'auteur Tom Colson | 2011-03-27
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser
more +1
à ignorer la première ligne du fichier. Puis vous pouvez transférer dans un temporaire (vous ne pouvez pas modifier des fichiers texte à la place):Après cela, vous pouvez utiliser une technique similaire pour les ajouter à nouveau de la première ligne:
Si vous utilisez ceux-ci dans un fichier de commandes, n'oubliez pas le double de la
%
signes:Ok, apparemment
more
ne fonctionne pas avec de trop gros fichiers, ce qui me surprend. Comme une alternative, qui devrait fonctionner si votre fichier ne contient pas de lignes vides (bien qu'il ressemble à CSV à partir de ce que j'ai réunis):off pour %%x in (*.txt) do ( plus de +1 "%%x" >tmp déplacer /y tmp "%%x" ) se bloque lorsque je déplace ce pour les fichiers de production. Chaque fichier est de 5 à 20 MO en taille. Le fichier tmp pousse à 2241 ko et c'est là où il s'arrête de fonctionner.
J'ai ajouté une autre approche, non testé encore, mais j'ai actuellement pas le temps de tester. Cette approche devrait être beaucoup plus lent, mais, malheureusement.
J'ai essayé ton script, mais j'ai été en cours d'exécution dans le même problème que @Tom, à savoir que ça ne fonctionne pas pour les gros fichiers. Votre deuxième approche (l'un sans
more
), cependant, ne fait rien quand j'essaie de le lancer. Avez-vous une idée pourquoi? En gros, la seule chose que j'ai changé, c'est de remplacer.txt
par.csv
dans la première ligne parce que je veux supprimer la première ligne de chaque fichier csv. Cependant, rien ne se passe (si je regarde le temps d'enregistrement des fichiers, cela ne change pas, donc je suppose qu'ils ne sont pas ouverts). Ce serait génial si vous pourriez avoir une idée.OriginalL'auteur Joey
Voici ma version.
for
pouvez parcourir la liste des fichiers très bien sans avoir besoin d'analyserdir
's de sortie (qui peut aussi échouer lamentablement avec des noms de fichier Unicode dans certaines circonstances). En outre, vous êtes absent le retrait de la première ligne.Nope! Parlé à bientôt! @echo off for %%x in (*.txt) do ( plus de +1 "%%x" >tmp déplacer /y tmp "%%x" )
OriginalL'auteur adarshr