[英]Redirecting contents of a file to a variable in command prompt
我有一个文件“ file.txt”,其中包含“ dir / s / b * .c”的输出
我想将file.txt的全部内容写在一个变量中。
有任何想法吗?
处理此类问题的通常方法是回答:“您想要这个做什么?”。 但是,您的问题很简单,所以这里是答案。 下面的批处理文件不仅将file.txt的内容存储在单个变量中,而且以后还会将变量值作为单独的行进行处理。
编辑 :我添加了从变量值中提取各个行作为子字符串的方法。
@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
您必须注意,批处理变量最多只能存储8K个字符。
不。但是您可以一条一条地进行。
for /f "delims=" %A in (file.txt) do echo %A
也许说您要达到的目标。 对C的了解不会批量帮助您,因为出于历史原因它是竞争性的。
批处理脚本是一个非常有限的工具,它对多行变量具有原始支持(带有特定的技巧,对于这种情况而言,它们可能无法按预期工作,但是如果您有兴趣, 请参见 )。
唯一合理的解决方案是使用一种功能强大的语言,该语言比Batch-Script少得多。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.