Comment puis-je charger le contenu d'un fichier texte dans une variable de fichier de traitement par lots?

StackOverflow https://stackoverflow.com/questions/134001

Question

Je dois pouvoir charger tout le contenu d'un fichier texte et le charger dans une variable pour un traitement ultérieur.

Comment puis-je faire cela?

Voici ce que j'ai fait grâce à la réponse de Roman Odaisky.

SetLocal EnableDelayedExpansion
set content=
for /F "delims=" %%i in (test.txt) do set content=!content! %%i

echo %content%
EndLocal
Était-ce utile?

La solution

Utilisez pour , par exemple:

set content=
for /f "delims=" %%i in ('filename') do set content=%content% %%i

Peut-être devrez-vous faire définirlocal enabledelayededpansion et / ou utiliser ! content! plutôt que % content% . Je ne peux pas tester, car je ne dispose pas de MS Windows à proximité (et je vous souhaite la même chose: -).

Le meilleur fichier de commandes par lots que je connaisse se trouve à l'adresse http: //www.rsdn.ru/article/winshell/batanyca.xml . Si vous ne connaissez pas le russe, vous pouvez quand même utiliser les extraits de code fournis.

Autres conseils

Si votre commande set prend en charge le commutateur / p, vous pouvez diriger les entrées de cette façon.

set /p VAR1=<test.txt

set /? | find "/ P"

  

Le commutateur / P vous permet de définir la valeur d'une variable sur une ligne de   entrée entrée par l'utilisateur. Affiche l'invite spécifiée avant   lire la ligne d'entrée. PromptString peut être vide.

Cela présente l’avantage supplémentaire de fonctionner pour les types de fichiers non enregistrés (ce que la réponse acceptée ne fait pas).

Vous pouvez utiliser:

set content=
for /f "delims=" %%i in ('type text.txt') do set content=!content! %%i

Pouvez-vous définir un traitement ultérieur?

Vous pouvez presque utiliser cette boucle, mais il n’existe pas de moyen simple d’insérer CR / LF dans une variable d’environnement. Vous aurez donc tout sur une seule ligne. (Vous pourrez peut-être contourner ce problème en fonction de ce que vous devez faire.)

Vous êtes également limité à moins de 8k fichiers texte de cette manière. (Vous ne pouvez pas créer une seule variable env supérieure à 8k environ.)

La suggestion de Bill de créer une boucle est ce dont vous avez besoin. Vous traitez le fichier ligne par ligne:

(utilisez % i sur une ligne de commande %% i dans un fichier de traitement par lots)

for /f "tokens=1 delims=" %%i in (file.txt) do echo %%i

plus avancé:

for /f "tokens=1 delims=" %%i in (file.txt) do call :part2 %%i
goto :fin

:part2
echo %1
::do further processing here
goto :eof

:fin

Créez un fichier appelé "SetFile.bat". qui contient la ligne suivante avec pas de retour chariot à la fin de celle-ci ...

set FileContents=

Ensuite, dans votre fichier de commandes, faites quelque chose comme ça ...

   @echo off
   copy SetFile.bat + %1 $tmp$.bat > nul
   call $tmp$.bat
   del $tmp$.bat

% 1 est le nom de votre fichier d'entrée et% FileContents% contiendra le contenu du fichier d'entrée après l'appel. Cela ne fonctionnera cependant que sur un fichier d’une ligne (c’est-à-dire un fichier ne contenant aucun retour à la ligne). Vous pouvez supprimer / remplacer les retours à la ligne du fichier avant d'appeler le% tmp% .bat si nécessaire.

for /f "delims=" %%i in (count.txt) do set c=%%i
echo %c%
pause
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top