Copie d'un fichier avec un batch DOS CRLF
jerome
-
jerome -
jerome -
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
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:
- Copie d'un fichier avec un batch DOS CRLF
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Fichier bin - Guide
- Fichier rar - Guide
- Fichier batch - Guide
5 réponses
ne pas faire de substitutuion si la ligne est vide ou le contraire
if not %ligne% =="" set ligne=!ligne:MICKEY=DONALD!
if not %ligne% =="" set ligne=!ligne:MICKEY=DONALD!
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!
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!
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question