Comment lire un fichier (texte ou binaire) à partir d'un fichier batch? Il existe un moyen de le lire en mode binaire ou en mode texte?
TYPE [fileName]
pour MS-Dos.
Comment lire un fichier (texte ou binaire) à partir d'un fichier batch? Il existe un moyen de le lire en mode binaire ou en mode texte?
TYPE [fileName]
pour MS-Dos.
Réponses:
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 analyser les fichiers ini !
for /?
la commande , analyser chaque ligne de myfile.txt, en ignorant les lignes commençant par un point-virgule, en passant le 2ème et le 3ème jeton de chaque ligne au corps for, avec des jetons délimités par des virgules et / ou des espaces.
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 sous n'importe quel "DOS" que vous utilisez)
%%i
.
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 de manière fiable que si l'expansion retardée est désactivée.
La détection de CR / LF par rapport à une seule LF 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 binaire directe semble donc presque impossible.
Le problème des lignes vides peut être résolu avec une astuce. Préfixez chaque ligne avec un numéro de ligne, à l'aide de 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
)
Le basculement entre l'expansion retardée activée et désactivée est nécessaire pour travailler en toute sécurité avec des chaînes, comme !
ou ^^^xy!z
.
C'est parce que la ligne set "var=%%a"
n'est sécurisée qu'avec DisabledDelayedExpansion , sinon les points d'exclamation sont supprimés et les carets 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ûre 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 à 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 "binaire" en une représentation hexadécimale
Vous pouvez regarder SO: convertir un fichier binaire en représentation HEX en utilisant un fichier batch
set /p
. J'avais l'habitude d' set /p value=< result.txt
obtenir la première ligne d'un fichier texte
0x1A
? ne for /F
se comportent de la même manière que NUL ( 0x00
personnages)?
:
ou ;
ou contiennent!
Un moyen très simple de le faire est d'utiliser la commande suivante:
set /p mytextfile=< %pathtotextfile%\textfile.txt
echo %mytextfile%
Cela n'affichera que 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!
Eh bien, il existe de nombreuses façons différentes, mais si vous voulez seulement AFFICHER le texte et ne pas le STOCKER n'importe où, utilisez simplement: findstr /v "randomtextthatnoonewilluse" filename.txt
Code corrigé:
setlocal enabledelayedexpansion
for /f "usebackq eol= tokens=* delims= " %%a in (`findstr /n ^^^^ "name with spaces.txt"`) do (
set line=%%a
set "line=!line:*:=!"
echo(!line!
)
endlocal
pause
eol=
et delims=
sont superflus, set line=%%a
devraient utiliser des guillemets et sans basculer le mode d'expansion différée, le code ne peut pas lire les points d'exclamation