2016-10-03 2 views
0

テキストファイルに情報を抽出してループに入れる必要があります。簡単にするために、最初の行が人物であり、2番目の行が好みの色であると仮定してください。テキストファイルをループする

テキストファイルは次のようになります。

tim 
red 
sarah 
blue and yellow 
sam 
green 

私は、エコー出力は次のようになりたいのですが:

tim likes red 
sarah likes blue and yellow 
sam likes green 

私はこれまでのコードを持っていることは以下の通りです:

for /f "tokens=1 delims=" %%Name %%color in (C:\textfile.txt) do echo %%Name likes %%color 
+2

だからあなたの質問は何ですか? –

+0

私は確かにそれを明確にしませんでした...私は自分の好きな色と人を関連付けることができるループをしたいです。私が今行っていることは働いていません。 – chew224

+2

コマンドプロンプトウィンドウを開いて 'for /? 'と入力すると、構文が正しくないことがわかります... – aschipfl

答えて

0
@echo off 
setlocal enabledelayedexpansion 
set x=0 
for /f "delims=" %%a in (t.txt) do (
    set /a "x=(x+1) %% 2" 
    if !x! == 1 set name=%%a 
    if !x! == 0 echo !name! likes %%a. 
) 
私は、次のオプションを参照してくださいあなたの仕事のために
+0

正確に意図した通りに動作します。ありがとうございます。 – chew224

0

  1. for /Fループや設定を使用して、特定の名前に関連付けられた色を待つために、他のすべての反復中に交互に変数(NAME)をクリア:

    @echo off 
    setlocal EnableDelayedExpansion 
    set "NAME=" 
    for /F "usebackq tokens=*" %%L in ("textfile.txt") do (
        if defined NAME (
         echo !NAME! likes %%L 
         set "NAME=" 
        ) else (
         set "NAME=%%L" 
        ) 
    ) 
    endlocal 
    
  2. 用いてfor /Lループを使用し、反復ごとに一度に2行を読み取り、予め行数の半分を決定します入力のリダイレクト(<):

    @echo off 
    setlocal EnableDelayedExpansion 
    for /F %%C in ('^< "textfile.txt" find /C /V ""') do set /A "HALF=%%C/2" 
    
    < "textfile.txt" (
        for /L %%I in (1,1,%HALF%) do (
         set /P NAME= 
         set /P COLOUR= 
         echo !NAME! likes !COLOUR! 
        ) 
    ) 
    endlocal 
    
関連する問題