Rechercher : dans
Par :

Copie d'un fichier avec un batch DOS CRLF

Dernière réponse le 24 jui 2008 à 07:50:01 jerome, le 11 jui 2008 à 17:57:39 
 Signaler ce message aux modérateurs

Bonjour,

On écrit pour l'instant un batch DOS qui parcourt un fichier IN.txt et génère un fichier OUT.txt dans lequel toutes les occurrences d'un mot du fichier IN.txt sont remplacées par un autre mot.

Dans le fichier OUT.txt on doit donc retrouver exactement ce qu'il y a dans le fichier IN.txt sauf que toutes les occurrences de "MICKEY", par exemple, sont remplacées par "DONALD".

On y arrive pas mal mais le seul problème est que tous les CRLF (carriage return,line feed) du fichier IN.txt ne sont pas copiés dans le fichier OUT.txt.

Si mon fichier IN.txt contient ceci:
MICKEY
MINIE

PLUTO
Le fichier OUT.txt généré par le batch DOS est:
DONALD
MINIE
PLUTO

Le CRLF entre MINIE et PLUTOT a disparu!

Est ce que quelqu'un aurait une solution pour que les CRLF ne disparaissent plus. Voici notre script:

del OUT.txt

setlocal enableDelayedExpansion

for /F "delims=" %%j in ('type IN.txt') do (
set ligne=%%j
set ligne=!ligne:MICKEY=DONALD!
echo !ligne!>> OUT.txt
)

end local

La solution doit être en batch DOS et si possible sans utiliser sed.

Merci d'avance pour votre aide précieuse pcq là on est complètement bloqué!

jerome

Configuration: Windows XP
Internet Explorer 6.0

Meilleures réponses pour « copie d'un fichier avec un batch DOS CRLF » dans :
[MS-Dos] Ecrire dans un fichier texte en batch VoirPour écrire dans un fichier texte, il suffit d'utiliser une redirection ">" : echo texte_à_ecrire > fichier_de_sortie.txt Pour écrire à la fin d'un texte existant (concaténation) : echo "écriture a la fin du fichier ">>...
[MS-Dos] Commandes DOS de base VoirCes commandes sont des commandes de base que vous pouvez utiliser dans un prompt DOS, par exemple, sur une disquette de démarrage. Pour obtenir plus d'informations sur ces commandes, tapez (dans un prompt DOS), le nom de votre commande suivi de...
Renommer plusieurs fichiers en batch VoirLe fait de renommer un grand nombre de fichiers peut très vite devenir fastidieux. Heureusement, il existe des outils permettant d'automatiser cette tâche dans un grand nombre de cas : Fonctionnalités natives Utilisation d'un programme...
Fichiers et répertoires VoirLes fichiers sous DOS Sur un ordinateur les informations sont stockées dans des fichiers. Lorsqu'on exécute un programme, MS-DOS traite les informations situées dans le fichier et les transmet au système. Sous MS-DOS chaque fichier peut être aussi...
Systèmes d'exploitation - DOS - Astuces VoirAvoir accès au lecteur de CD-ROM Le lecteur de CD-ROM se déclare dans les fichiers config.sys et autoexec.bat. Dans le fichier config.sys il faut déclarer le gestionnaire de périphérique pour votre lecteur CD-ROM (bien qu'il soit détecté...

1

jerome, le 14 jui 2008 à 09:37:54

Personne n'a une idée?

Répondre à jerome

2

dubcek, le 14 jui 2008 à 09:58:05

Ne pas faire de substitutuion si la ligne est vide ou le contraire
if not %ligne% =="" set ligne=!ligne:MICKEY=DONALD!

Répondre à dubcek

3

jerome, le 22 jui 2008 à 11:12:13

Bonjour dubeck,

Excuse pour le temps à te répondre, gt en congé.

J'ai essayé ta solution mais ca ne change rien.

En fait, on dirait que le problème se pose plutôt au niveau du "for /F". Je m'explique.

Quand je fais la commande "type IN.txt" dans une fenêtre DOS, il me renvoie bien les carriage return. Il m'affiche donc bien:
MICKEY
MINIE

PLUTO
Par contre, si je fais simplement ceci:

del OUT.txt
for /F "delims=" %%j in ('type IN.txt') do (
echo %%j>> OUT.txt
)

Les carriage return disparaissent dans le fichier OUT.txt, j'obtiens ceci:
MICKEY
MINIE
PLUTO

Je ne vois vraiment pas d'où peut provenir le problème... Une option du FOR qu'il faudrait mettre en plus? Ou alors ca vient peut-être du "delims="? Une autre idée? De mon côté, j'ai tout essayé sans succès!

Répondre à jerome

4

dubcek, le 22 jui 2008 à 12:45:04

Effectivement for /F ignore les lignes vides

Répondre à dubcek

5

 jerome, le 24 jui 2008 à 07:50:01

Pas de solution à ce problème donc... Il n'existe pas une option qui permettrait de conserver ces lignes vides?

Je n'en vois pas dans la description de la commande for en tout cas.

Merci quand même

Répondre à jerome
Collection CommentÇaMarche.net