我正在尝试使用.batch文件将数据从a.txt复制到b.txt。但我不想要来自a.txt的所有数据。我只是想复制特定的数据。
例如:a.txt包含
line 1:this is a.txt file
line 2: name= abc
line 3: age= 24
line 4: country= xyz
line 5: contact no= 123456778
line 6: end of a.txt
现在,我想读取a.txt并将特定数据复制到新的b.txt:
b.txt:
abc 21 xyz
有什么建议吗?
感谢您的帮助。
那仁
答案 0 :(得分:2)
假设你的意思是abc 24 xyz
。 (最下面的答案)
这为您提供了最灵活,最干净的变量。
@echo off
setlocal enabledelayedexpansion
:: Just making sure that %data% is empty
set data=
for /f "tokens=1,2* delims==" %%x in (a.txt) do call :work %%x "%%y"
:: Removes leading space and sends to b.txt
echo %data:~1%>b.txt
goto :eof
:work
set var=%1
set val=%~2
:: Remove any leading spaces.
:work-loop
if "!val:~0,1!"==" " (
set val=!val:~1!
goto :work-loop
)
if "%var%"=="name" set data=%data% %var%
if "%var%"=="age" set data=%data% %var%
if "%var%"=="country" set data=%data% %var%
goto :eof
或者更短一些。
@echo off
setlocal enabledelayedexpansion
set data=
for /f "tokens=1,2* delims==" %%x in (a.txt) do call :work %%x "%%y"
:: Removes leading space and sends to b.txt
echo %data:~1%>b.txt
echo %data%>b.txt
goto :eof
:work
set var=%1
set val=%~2
:since leading spaces have not been removed, there need be no space between %data% and %var%
if "%var%"=="name" set data=%data%%var%
if "%var%"=="age" set data=%data%%var%
if "%var%"=="country" set data=%data%%var%
goto :eof
最短的答案
@echo off
setlocal
for /f "tokens=1,2* delims== " %%x in (a.txt) do (
if "%%x"=="name" set %%x=%%y
if "%%x"=="age" set %%x=%%y
if "%%x"=="country" set %%x=%%y
)
echo %name% %age% %country%>b.txt
endlocal
在最后一篇文章中setlocal
和endlocal
的使用不是正确的::删除前导空格并发送到b.txt
echo%data:~1%> b.txt
icary,他们只是确保在批处理文件结束时你的变量就会消失。