【问题标题】:How to copy particular data from one file to another in a batch script如何在批处理脚本中将特定数据从一个文件复制到另一个文件
【发布时间】:2012-08-31 21:25:58
【问题描述】:

我正在尝试使用 .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

有什么建议吗?

感谢您的帮助。

那仁

【问题讨论】:

  • 我想你的意思是:abc 24 xyz.
  • 是的,没错。我的错。

标签: file batch-file copy


【解决方案1】:

假设您的意思是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

在最后一个中,setlocalendlocal 的使用不是 ness :: 删除前导空格并发送到 b.txt echo %data:~1%>b.txt iary,他们只是确保你的变量在批处理文件结束时消失。

【讨论】:

  • 我刚刚注意到,在两个较长的解决方案中,data=%data% %var% 应该是 data=%data% %val%data=%data%%var% 应该是 data=%data%%val%
猜你喜欢
  • 2014-02-24
  • 2013-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-12
  • 1970-01-01
相关资源
最近更新 更多