1

バッチ ファイルの分割行について議論している投稿はかなりありますが、私の要件を満たすことができません。IP リストのセットを含むプロパティ ファイルを作成し、それらのリストをバッチ ファイルで処理したいと考えています。したがって、プロパティ ファイルは次のようになります (かなりの数があり、1 行では読みにくくなる可能性があるため、リストを 1 行にまとめたくありません)。

IPLIST_1=^
12.34.56.1 ^
21.43.65.2 ^
5.8.001.3

IPLIST_2=^
222.11.33.1 ^
10.1.1.2

そして、次のようなことを行うバッチ ファイル:

setlocal EnableDelayedExpansion
FOR /f "delims=" %%x in (iplists.txt) DO (set "%%x")
FOR %%A IN (%IPLIST_1%) DO (
some stuff
)

しかし、私が望んでいたように機能していません。このようなバッチ ファイルがあれば、すべて問題ありません。

FOR %%A IN (^
12.34.56.1 ^
21.43.65.2 ^
5.8.001.3) DO (
some stuff
)

ありがとう、ポール

4

1 に答える 1

0
@echo off
set "LIST="
for /f "tokens=1 delims=^^" %%I in (iplists.txt) do (

  setlocal enabledelayedexpansion
  echo %%I | find "IPLIST_" &&  for %%P in (!LIST!) do ( something with %%P ) & (  set "IPLIST_=")
  echo %%I | find "IPLIST_" || ( set "LIST=!LIST! %%I")
  endlocal

)

あなたがここに何を持っているかを理解するのは困難でした。私の仮定:

  1. あなたはファイルiplists.txtを持っています

  2. バットが各リストを1行全体として解釈するようにしたいのですが、IPは別々の行にあるので、^でそれらを統合しようとしました (これは実際にはフルタイルです)

  3. FORループで各リストを処理する

上記のコードは私の提案です-外側のループでは^はエスケープされます-それらはまったく必要ありませんが、害はありません。バッチスクリプトのようにリストを1行にまとめることはできません。


最初に、list.txtを1行ずつ読み始めています。最初は空のリストが内部FORに渡されていますが、スペースで区切られた項目を繰り返します。そのようなものがない場合は、何も実行されません。setlocal enabledelayedexpansionは、LISTの変更を角かっこ内に表示することです。2つecho %%I | find "IPLIST_"で条件付き実行を実行しています。行%%IにIPLIST_文字列が含まれていない場合、2行目が実行され、LISTが次のIPで展開されます。「IPLIST_」が含まれている場合、リストが内部FORによって処理され、最後に削除される最初の行が実行されます。その後、ファイルの終わりまで再開します。

于 2013-01-18T23:03:27.987 に答える