Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
File 如何在批处理脚本中将特定数据从一个文件复制到另一个文件_File_Batch File_Copy - Fatal编程技术网

File 如何在批处理脚本中将特定数据从一个文件复制到另一个文件

File 如何在批处理脚本中将特定数据从一个文件复制到另一个文件,file,batch-file,copy,File,Batch File,Copy,我正在尝试使用.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

我正在尝试使用.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
有什么建议吗

谢谢你的帮助


Naren

假设您的意思是
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
不是ness::删除前导空格并发送到b.txt echo%数据:~1%>b.txt
icary,他们只是确保批处理文件结束时变量消失。

我想你的意思是:
abc24xyz
。是的,这是正确的。我的错误。我刚刚注意到,在两个较长的解决方案中,
data=%data%%var%
应该是
data=%data%%val%
,而
data=%data%%var%
应该是
data=%data%%val%