Redirecting file contents to variable on command line

I have a file "file.txt" which contains the output "dir / s / b * .c"

I want to write this whole file.txt in one variable.

Any ideas?

+1


source to share


4 answers


The usual way to handle questions like this is to answer, "Why do you need this?" However, your question is clean and simple, so here is the answer. The batch file below not only saves the contents of file.txt in one variable, but also treats the variable's value as separate lines.

EDIT : I've added a method to separate individual strings from a variable value as substrings.



@echo off
setlocal EnableDelayedExpansion

rem Create variables with LF and CR values:
set LF=^
%empty line 1/2, don't remove%
%empty line 2/2, don't remove%
for /F %%a in ('copy /Z "%~F0" NUL') do set CR=%%a

rem Store the contents of file.txt in a single variable,
rem end each line with <CR><LF> bytes
set "variable="
for /F "delims=" %%a in (file.txt) do (
   set "variable=!variable!%%a!CR!!LF!"
)

rem 1- Show the contents of the variable:
echo !variable!

rem 2- Process the contents of the variable line by line
echo/
set i=0
for /F "delims=" %%a in ("!variable!") do (
   set /A i+=1
   echo Line !i!- %%a
)

rem Get the starting position and length of each line inside the variable
set /A i=0, lastStart=0
for /F "delims=:" %%a in (
      '(cmd /V:ON /C set /P "=^!variable^!" ^& echo/^) ^<NUL ^| findstr /O "^^"'
   ) do (
   set /A len[!i!]=%%a-lastStart-2, i+=1
   set /A start[!i!]=%%a, lastStart=%%a
)
set "len[0]="
set "start[%i%]="
set /A lastLine=i-1

rem 3- Extract individual lines from the variable contents as substrings
:getNumber
   echo/
   set "num="
   set /P "num=Enter line number (nothing to end): "
   if not defined num goto end
   if %num% gtr %lastLine% echo Invalid number & goto getNumber
   for /F "tokens=1,2" %%i in ("!start[%num%]! !len[%num%]!") do (
      echo Line %num%- !variable:~%%i,%%j!
   )
goto getNumber
:end

      

You should notice that batch variables can only store 8 characters.

+5


source


Not. But you can go through the lines one by one.

for /f "delims=" %A in (file.txt) do echo %A

      



Perhaps tell me what you are trying to achieve. Knowing C will not help you in the game, because it is for historical reasons.

+1


source


You can use set / p:

set /p foo=<file.txt

      

See also this question .

+1


source


Batch-Script is a very limited tool with primitive support for multi-line variables (with specific hacks that won't work as expected for this scenario, but if you're interested, see this ).

The only sensible solution is to switch to a capable language that is smaller than the rest of the Batch-Script .

+1


source







All Articles