Fichiers batch: Comment lire un fichier?

Comment lire un fichier (texte ou binary) à partir d’un fichier de commandes? Il existe un moyen de le lire en mode binary ou en mode texte?

Vous pouvez utiliser la commande for:

 FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do @echo %i %j %k 

Type

 for /? 

à l’invite de commande. En outre, vous pouvez parsingr les fichiers ini !

Sous cmd.exe de style NT, vous pouvez parcourir les lignes d’un fichier texte avec

 FOR /F %i IN (file.txt) DO @echo %i 

Tapez “help for” sur l’invite de commande pour plus d’informations. (Je ne sais pas si cela fonctionne dans n’importe quel “DOS” que vous utilisez)

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 si l’extension retardée est désactivée.

La détection de CR / LF par rapport à la FL unique semble également un peu compliquée.
Les caractères NUL sont également problématiques, car une boucle FOR annule immédiatement la lecture.

La lecture binary directe semble donc pratiquement impossible.

Le problème avec les lignes vides peut être résolu avec 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 ) 

Basculer entre activer et désactiver l’expansion retardée est nécessaire pour travailler en toute sécurité avec les chaînes, comme ! ou ^^^xy!z .
C’est parce que le set "var=%%a" lignes set "var=%%a" n’est sécurisé qu’avec DisabledDelayedExpansion , sinon les points d’exclamation sont supprimés et les caractères sont utilisés comme caractères d’échappement (secondaires) et ils sont également supprimés.
Mais l’utilisation de la variable var n’est sécurisée qu’avec EnabledDelayedExpansion , car même un call %%var%% échouera avec un contenu tel que "&"& .

EDIT: Ajout de la variante set / p
Il y a une seconde 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 à la fin de la 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 "binary" dans une représentation hexadécimale
Vous pouvez regarder SO: convertir un fichier binary en représentation HEX en utilisant un fichier de commandes

Eh bien il ya beaucoup de façons différentes, mais si vous voulez seulement afficher le texte et ne le stockez pas n’importe où, alors vous utilisez simplement: findstr /v "randomtextthatnoonewilluse" filename.txt

Un moyen très simple de le faire est d’utiliser la commande suivante:

 set /p mytextfile=< %pathtotextfile%\textfile.txt echo %mytextfile% 

Cela affichera uniquement la première ligne de texte dans un fichier texte. L'autre façon de le faire est d'utiliser la commande suivante:

 type %pathtotextfile%\textfile.txt 

Cela mettra toutes les données dans le fichier texte à l'écran. J'espère que cela t'aides!

Utilisation:
set /p var=< file.ext
C'est le moyen le plus simple de le faire fonctionne sur la plupart des versions de lot.

Si vous voulez juste l’afficher sur cmd, vous pouvez utiliser ceci:

 cat myfile.txt