Le FOR-LOOP fonctionne généralement, mais il y a quelques problèmes. Le FOR n'accepte pas les lignes vides et les lignes avec plus de ~8190 sont problématiques. L'expansion ne fonctionne que de manière fiable, si l'expansion retardée est désactivée.
La détection des CR/LF par rapport à une seule LF semble également un peu compliquée.
Les caractères NUL sont également problématiques, car un FOR-Loop annule immédiatement la lecture.
Direct La lecture binaire semble donc presque impossible.
Le problème des lignes vides peut être résolu grâce à une astuce. Préfixez chaque ligne avec un numéro de ligne, en utilisant la commande findstr, et après la lecture, supprimez le préfixe.
@echo off
SETLOCAL DisableDelayedExpansion
FOR /F "usebackq delims=" %%a in (`"findstr /n ^^ t.txt"`) do (
set "var=%%a"
SETLOCAL EnableDelayedExpansion
set "var=!var:*:=!"
echo(!var!
ENDLOCAL
)
Il est nécessaire de basculer entre l'activation et la désactivation de l'expansion retardée. pour travailler en toute sécurité avec des chaînes de caractères, comme !
o ^^^xy!z
.
C'est parce que la ligne set "var=%%a"
n'est sûr qu'avec DisabledDelayedExpansion sinon, les points d'exclamation sont supprimés et les carets sont utilisés comme caractères d'échappement (secondaires) et sont également supprimés.
Mais en utilisant la variable var
n'est sûr qu'avec EnabledDelayedExpansion car même un call %%var%%
échouera avec un contenu comme "&"&
.
EDIT : Ajout de la variante set/p
Il existe une deuxième façon de lire un fichier avec set /p
Les seuls inconvénients sont qu'il est limité à ~1024 caractères par ligne et qu'il supprime les caractères de contrôle en fin de ligne.
Mais l'avantage est que vous n'avez pas besoin du basculement différé et qu'il est plus facile de stocker des valeurs dans des variables.
@echo off
setlocal EnableDelayedExpansion
set "file=%~1"
for /f "delims=" %%n in ('find /c /v "" %file%') do set "len=%%n"
set "len=!len:*: =!"
<%file% (
for /l %%l in (1 1 !len!) do (
set "line="
set /p "line="
echo(!line!
)
)
Pour le lire de façon "binaire" dans une représentation hexagonale
Vous pourriez regarder SO : conversion d'un fichier binaire en représentation HEX à l'aide d'un fichier batch
0 votes
@RookieTEC9 : oui, je sais qu'il s'agit de deux choses complètement différentes, mais j'avais besoin d'une réponse qui fonctionnait sous msdos, pas sous Windows nt (ou des versions plus récentes), et cette question a été posée il y a 7 ans, gardez cela à l'esprit.
0 votes
@RookieTEC9 : Je pense que tu as raison, ça fait un moment que ça n'a pas été fait. Je vais juste enlever le tag ms-dos.
1 votes
Vous pouvez utiliser la commande
TYPE [fileName]
pour MS-Dos.0 votes
Essayez ceci, ça a marché pour moi. stackoverflow.com/a/31919715/4534414