Copie d'un fichier avec un batch DOS CRLF

Fermé
jerome - 11 juil. 2008 à 17:57
 jerome - 24 juil. 2008 à 07:50
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
A voir également:

5 réponses

personne n'a une idée?
0
dubcek Messages postés 18724 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 15 mai 2024 5 615
14 juil. 2008 à 09:58
ne pas faire de substitutuion si la ligne est vide ou le contraire
if not %ligne% =="" set ligne=!ligne:MICKEY=DONALD!
0
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!
0
dubcek Messages postés 18724 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 15 mai 2024 5 615
22 juil. 2008 à 12:45
effectivement for /F ignore les lignes vides
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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
0