0

.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

助言がありますか?

手伝ってくれてありがとう。

ナーレン

4

1 に答える 1

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 に送信します。バッチ ファイルの終了時に変数が確実に停止するようにします。

于 2012-09-01T03:49:35.477 に答える