我有一个文本文件,每行都有文字。我希望能够将每一行放在一条长行中以及一个空格。所以,如果文本文件有:
Bob
Jack
Sam
我希望结果是
Bob Jack Sam
以下是我正在处理的两种方法,但我遇到了困难。括号[]中的任何内容都意味着我知道语法是完全错误的;我只是把它放在那里展示我的思考过程。评论部分只是我的实验,我留下了他们,以防任何人想要评论他们会做什么/为什么他们做他们做的事情。
方法1:
@echo off
SETLOCAL EnableDelayedExpansion
SET count=1
FOR /F "tokens=* delims= usebackq" %%x IN ("afile.txt") DO (
SET var!count!=%%x
for %%a in (!count!) do (
!var%%a! = !var%%a! & " "
echo !var%%a!
)
SET /a count=!count!+1
echo !count!
)
::echo !var1! !var2! !var3!
start "" firefox.exe !var%%a!-1
ENDLOCAL
::echo "endlocal" %var1% %var2% %var3%
方法2:
@echo off
SETLOCAL EnableDelayedExpansion
SET count=1
FOR /F "tokens=* delims= usebackq" %%x IN ("afile.txt") DO (
SET var!count!=%%x
call echo %%var!count!%%
SET /a count=!count!+1
echo !count!
)
::echo !var1! !var2! !var3!
start "" firefox.exe ^
[i = 1]
[for i to !count! do (]
call echo %%var!count!%% & " " & " "^
ENDLOCAL
::echo "endlocal" %var1% %var2% %var3%
答案 0 :(得分:3)
如果您只有三个值,则可以直接从文件中检索它们
< input.txt (
set /p "line1="
set /p "line2="
set /p "line3="
)
set "var=%line1% %line2% %line3%"
echo("%var%"
如果您不知道值的数量,请使用for /f
命令读取行并将内容连接到变量中。
@echo off
setlocal enableextensions enabledelayedexpansion
set "var="
for /f "usebackq delims=" %%a in ("input.txt") do set "var=!var!%%a "
echo("%var%"
但是如果数据可以包含感叹号,则延迟扩展状态将删除它们(以及由它们围绕的文本)。为避免这种情况,可以使用
@echo off
setlocal enableextensions disabledelayedexpansion
set "var="
for /f "usebackq delims=" %%a in ("input.txt") do (
setlocal enabledelayedexpansion
for /f "tokens=* delims=¬" %%b in ("¬!var!") do endlocal & set "var=%%b%%a "
)
echo("%var%"
使用setlocal/endlocal
和内部for
来避免!
字符出现问题
或者你可以试试这样的东西
@echo off
setlocal enableextensions disabledelayedexpansion
for /f "delims=" %%a in ('
"<nul cmd /q /c "for /f "usebackq delims=" %%z in ("input.txt"^) do (set /p ".=%%z "^)""
') do set "var=%%a"
echo("%var%"
它运行一个cmd
实例来输出输入行,因为只有一个输出行(<nul set /p
用于输出没有换行的数据,所以所有数据都在同一行)。它包含在for
中以检索变量
答案 1 :(得分:0)
这对你有用吗?
@echo off
SET var=
SETLOCAL EnableDelayedExpansion
FOR /f %%i in (afile.txt) DO (
SET var=!var!%%i
)
echo !var!
ENDLOCAL
请注意SET var=!var!%%i[Space Here]
之后有一个空格来分隔每行中的每个单词
修改强>
如果要在循环中显示当前值,只需打印%%i
并且不连接。 FOR循环结束后,它将打印分配给变量
@echo off
SET var=
SETLOCAL EnableDelayedExpansion
for /f %%i in (input.txt) do (
SET var=%%i
echo !var!
)
echo %var%
将打印:
Bob
Jack
Sam
Sam
答案 2 :(得分:0)
试试这个:发布后修改。
@Echo off
Set "File=Recent_Log.txt"
Set "Output=My_Log.txt"
(
For /F %%F in (%File%) Do (
Set /p ".=%%~F "
)
) > "%Output%" < Nul
Goto :Eof
答案 3 :(得分:0)
因为这是Google搜索后的第一个链接,所以我发布了我的解决方案(Windows 7/10 .bat):
for %%f in (h:\blaba\*.*) do (type "%%f" & echo.) >> h:\sfsdf\dd.txt
注意:当您的目录/文件名包含空格时,请使用双引号。