Pergunta

Eu preciso ser capaz de carregar todo o conteúdo de um arquivo de texto e carregá-lo em uma variável para posterior processamento.

Como posso fazer isso?


Aqui está o que eu fiz, graças à resposta de Roman Odaisky.

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

echo %content%
EndLocal
Foi útil?

Solução

Use for, algo ao longo das linhas de:

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

Talvez você vai ter que fazer setlocal enabledelayedexpansion e / ou uso !content! em vez de %content%. Eu não posso testar, como eu não tenho nenhum MS Windows próxima (e desejo-lhe o mesmo: -).

O best-arquivo de lote-black-magic-referência que eu conheço é em http: //www.rsdn.ru/article/winshell/batanyca.xml . Se você não sabe russo, você ainda pode fazer algum uso dos trechos de código fornecidos.

Outras dicas

Se o seu comando set suporta o parâmetro / p, em seguida, você pode inserir tubo que forma.

set /p VAR1=<test.txt

set /? | Find "/ P"

A opção / P permite definir o valor de uma variável para uma linha de entrada digitada pelo usuário. Exibe o especificado promptString antes lendo a linha de entrada. O promptString pode estar vazio.

Este tem a vantagem de trabalhar para tipos de arquivos registrados-un (que a resposta aceita não).

Você pode usar:

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

Você pode definir ainda mais o processamento?

Você pode usar um loop for para quase fazer isso, mas não há nenhuma maneira fácil de inserir CR / LF em uma variável de ambiente, assim você vai ter tudo em uma linha. (Você pode ser capaz de contornar este dependendo do que você precisa fazer.)

Você também está limitado a menos de cerca de 8k arquivos de texto dessa maneira. (Você não pode criar um único env var maior do que em torno de 8k.)

sugestão de um loop de Bill é provavelmente o que você precisa. Você processar a uma linha de arquivo de cada vez:

(use %i em um %%i linha de comando em um arquivo de lote)

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

mais avançado:

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

Crie um arquivo chamado "SetFile.bat" que contém a seguinte linha com nenhum retorno de carro no final do it ...

set FileContents=

Então, em seu arquivo em lotes fazer algo assim ...

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

% 1 é o nome do seu arquivo de entrada e% fileContents% conterá o conteúdo do arquivo de entrada após a chamada. Isso só vai trabalhar em um arquivo de uma linha que (isto é, um ficheiro que contém nenhum carro retorna). Você poderia retirar / substituir retornos de carro a partir do arquivo antes de chamar o% tmp% .bat, se necessário.

for /f "delims=" %%i in (count.txt) do set c=%%i
echo %c%
pause
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top