0

「for」ループからいくつかの行(Myfile)の一部を2つの個別の変数または配列に取得する必要があります。私の目標は、次の行のパスを構成するためにお互いを使用することですresult * .txt。私はあなたが見ているものを以下に書いていますが、私の「a」変数は「C:\Temp\FR」(Myfileの行末一致トークン)のみをエコーし​​ていることがわかります。

変数/配列で一致するすべてのトークンを取得する方法はありますか? たとえば、私の場合、「C:\Temp\USA」と「C:\Temp\FR」をループから外す必要があります。ありがとう

   for /f "tokens=2 delims==" %%x in (Myfile) do (
   set a=%%x
  )
  echo %a%
  'MyFile
   DIR1= C:\Temp\USA
   DIR2= C:\Temp\FR
   result1.txt
   result2.txt
4

2 に答える 2

0

それにはいくつかの方法があります。ファイルの先頭から数行を読み取りたい場合、最も簡単な方法は、いくつかの変数でそれらを直接読み取ることです。

< Myfile (
set /P var1=
set /P var2=
)

これらの変数には完全な行が含まれているため、等号の後の部分を抽出する必要があることに注意してください。

あなたの例では、等号の行が必要なだけなのでfindstr "=" Myfile、FORコマンドで使用してそれらを処理することができます。行数が定義されていない場合は、提案したように、必要なすべての行を配列に保存する必要があります。

setlocal EnableDelayedExpansion
set n=0
for /F "tokens=2 delims==" %%a in ('findstr "=" Myfile') do (
   set /A n+=1
   set var[!n!]=%%a
)
rem Show all array elements
for /L %%i in (1,1,%n%) do (
   echo !var[%%i]!
)
rem Show just the second element
echo %var[2]%

ただし、特定のケースでは、必要な行は変数割り当ての形式になっています。これは、SET コマンドでそのような行を実行すると、行の値が「自動的に」保存されることを意味します。

for /F "delims=" %%a in ('findstr "=" Myfile') do set %%a

DIR1前の FOR の後、またはDIR2変数の値を直接取得できます。次に例を示します。

echo %DIR1%
echo %DIR2%

この方法は非常に単純で、読み込まれる個々の変数をテストする必要はありません。

値の等号の後のスペースを削除する場合は、FOR オプションを調整して削除できます。

for /F "tokens=1* delims== " %%a in ('findstr "=" Myfile) do set %%a=%%b
于 2013-04-24T05:37:38.977 に答える