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