Domanda

Devo essere in grado di caricare l'intero contenuto di un file di testo e caricarlo in una variabile per un'ulteriore elaborazione.

Come posso farlo?


Ecco cosa ho fatto grazie alla risposta di Roman Odaisky.

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

echo %content%
EndLocal
È stato utile?

Soluzione

Usa per , qualcosa del tipo:

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

Forse dovrai setlocal enabledelayedexpansion e / o utilizzare ! content! anziché % content% . Non posso testare, poiché non ho alcun MS Windows nelle vicinanze (e ti auguro lo stesso :-).

Il miglior riferimento batch-file-black-magic-che conosco è su http: //www.rsdn.ru/article/winshell/batanyca.xml . Se non conosci il russo, potresti comunque fare un uso dei frammenti di codice forniti.

Altri suggerimenti

Se il comando set supporta l'opzione / p, è possibile reindirizzare l'input in questo modo.

set /p VAR1=<test.txt

set /? | trova " / P "

  

L'opzione / P consente di impostare il valore di una variabile su una riga di   input inserito dall'utente. Visualizza il promptString specificato prima   leggendo la riga di input. PromptString può essere vuoto.

Questo ha l'ulteriore vantaggio di lavorare con tipi di file non registrati (cosa che la risposta accettata non ha).

Puoi usare:

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

Puoi definire ulteriori elaborazioni?

Puoi usare un ciclo for quasi per farlo, ma non c'è modo semplice per inserire CR / LF in una variabile d'ambiente, quindi avrai tutto in una riga. (potresti essere in grado di aggirare il problema a seconda di ciò che devi fare.)

In questo modo sei anche limitato a meno di circa 8k file di testo. (Non è possibile creare un singolo var più grande di circa 8k.)

Il suggerimento di Bill di un ciclo for è probabilmente quello di cui hai bisogno. Elabora il file una riga alla volta:

(usa % i alla riga di comando %% i in un file batch)

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

più avanzato:

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

Crea un file chiamato " SetFile.bat " che contiene la seguente riga con nessun ritorno a capo alla fine di esso ...

set FileContents=

Quindi nel tuo file batch fai qualcosa del genere ...

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

% 1 è il nome del file di input e% FileContents% conterrà il contenuto del file di input dopo la chiamata. Funzionerà solo su un file di una riga (ovvero un file che non contiene ritorni a capo). È possibile rimuovere / sostituire i ritorni a capo dal file prima di chiamare% tmp% .bat se necessario.

for /f "delims=" %%i in (count.txt) do set c=%%i
echo %c%
pause
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top