1

パラメーターをバッチ ファイルに渡す際に問題が発生しています。パラメーター ファイルには n 行があり、bacth を実行して最初の行を読み取り、それを .bat のパラメーターとして実行し、次の行を読み取ります。同様に、テキスト ファイルに n 行が見つかった場合は、n 回実行する必要があります (たとえば、テキスト ファイルに 100 行ある場合、.bat のループ実行は 100 回継続する必要があります)。私は次のようなスクリプトを持っています

@echo off

setlocal enabledelayedexpansion

set file1=D:\Batch\parm.txt

set /a cnt=0

for /f "tokens=*" %%a in (%file1%) do (

set %file1% =%%a

echo !%file1%!
)

FOR /F "tokens=1 delims=|" %%G IN (%file1%) DO set a1=%%G

FOR /F "tokens=2 delims=|" %%K IN (%file1%) DO set a2=%%K

FOR /F "tokens=3 delims=|" %%I IN (%file1%) DO set a3=%%I

echo parameter file found

echo reading parameters to pass through

echo (%a1%,%a2%,%a3%)>>D:\Batch\output.txt

goto break

:break

set /a cnt+=1
exit /b

私のパラメータファイルは次のように入力されています

"India"|"Australia"|"Africa"

"I1"|"A1"|"A11"

"I2"|"A2"|"A12"

私の出力は次のようになります。

パラメータファイルが見つかりました

通過するパラメーターの読み取り

「インド」「オーストラリア」「アフリカ」

パラメータファイルが見つかりました

通過するパラメーターの読み取り

「I1」、「A1」、「A11」

パラメータファイルが見つかりました

通過するパラメーターの読み取り

「I2」、「A2」、「A12」

現在、出力として最後のパラメーターのみを取得しています。スクリプトの修正を手伝ってください。

4

2 に答える 2

1

あなたの最初の FOR ループはクレイジーです。値と一致する名前の変数を作成しようとします。それがどのように役立つかわかりません。

各パラメーターのロジックはすべて間違っています。ループ内の最初のパラメーターのファイル全体を読み取ります。そのループが終了すると、見つかった最後の行のパラメーター値は 1 つだけになります。次に、2 番目と 3 番目のパラメーターに対して同じプロセスを実行します。それはうまくいきません。

1 つのループで 3 つのパラメーターすべてを読み取る必要があります。

@echo off
setlocal
set "file1=D:\Batch\parm.txt"
if exist "%file1%" (
  echo parameter file found
  echo reading parameters to pass through
  set /a cnt=0
  for /f "usebackq tokens=1-3 delims=|" %%A IN ("%file1%") do (
    echo (%%A,%%B,%%C^)
    set /a cnt+=1
  )
)>d:\batch\output.txt
echo cnt=%cnt%
exit /b
于 2013-10-24T20:01:33.323 に答える
0
@echo off

setlocal enabledelayedexpansion

set file1=D:\Batch\parm.txt

set /a cnt=0

for /f "tokens=*" %%a in (%file1%) do (

set %file1%=%%a

echo !%file1%!
)

FOR /F "tokens=1,2,3 delims=|" %%G IN (%file1%) DO set a1=%%a&set a2=%%b&set a3=%%c

echo parameter file found>>D:\Batch\output.txt

echo reading parameters to pass through>>D:\Batch\output.txt

echo (%a1%,%a2%,%a3%)>>D:\Batch\output.txt

goto break

:break

set /a cnt+=1
exit /b
于 2013-10-24T14:44:34.173 に答える