¿Cómo puedo cargar el contenido de un archivo de texto en una variable de archivo por lotes?

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

Pregunta

Necesito poder cargar todo el contenido de un archivo de texto y cargarlo en una variable para su posterior procesamiento.

¿Cómo puedo hacer eso?


Esto es lo que hice gracias a la respuesta de Roman Odaisky.

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

echo %content%
EndLocal
¿Fue útil?

Solución

Use para , algo parecido a:

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

Tal vez tengas que hacer setlocal enabledelayedexpansion y / o usar !!! en lugar de % content% . No puedo probar, ya que no tengo ningún MS Windows cerca (y le deseo lo mismo :-).

La mejor referencia de archivo de magia negra por lotes que conozco está en http: //www.rsdn.ru/article/winshell/batanyca.xml . Si no sabe ruso, aún puede hacer uso de los fragmentos de código proporcionados.

Otros consejos

Si su comando set admite el modificador / p, puede canalizar la entrada de esa manera.

set /p VAR1=<test.txt

conjunto /? | encuentra " / P "

  

El interruptor / P le permite establecer el valor de una variable en una línea de   Entrada introducida por el usuario. Muestra el promptString especificado antes   Leyendo la linea de entrada. El promptString puede estar vacío.

Esto tiene el beneficio adicional de trabajar para tipos de archivos no registrados (que la respuesta aceptada no tiene).

Puedes usar:

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

¿Puede definir un procesamiento adicional?

Puede usar un bucle for para hacer casi esto, pero no hay una manera fácil de insertar CR / LF en una variable de entorno, por lo que tendrá todo en una línea. (es posible que pueda solucionar esto dependiendo de lo que necesite hacer).

También está limitado a menos de aproximadamente 8k archivos de texto de esta manera. (No puede crear una sola env env mayor que alrededor de 8k).

La sugerencia de Bill de un bucle for es probablemente lo que necesitas. Usted procesa el archivo una línea a la vez:

(use % i en una línea de comando %% i en un archivo por lotes)

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

más avanzado:

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

Cree un archivo llamado " SetFile.bat " que contiene la siguiente línea con sin retorno de carro al final ...

set FileContents=

Luego, en tu archivo por lotes, haz algo como esto ...

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

% 1 es el nombre de su archivo de entrada y% FileContents% contendrá el contenido del archivo de entrada después de la llamada. Sin embargo, esto solo funcionará en un archivo de una línea (es decir, un archivo que no contenga retornos de carro). Puede eliminar / reemplazar los retornos de carro del archivo antes de llamar a% tmp% .bat si es necesario.

for /f "delims=" %%i in (count.txt) do set c=%%i
echo %c%
pause
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top