

windowsバッチファイルで特定の文字列に対して、一連の繰り返し処理を行いたいです。  
下記のようにバッチファイルを記載したのですが、echo is off というエラー文言が表示されます。  
検索してみたものの、@echo off ~~ 部分の記載があれば問題なく処理できるという記載があったため修正したのですがうまく行きません。

[code]

    @echo off
    setlocal enabledelayedexpansion
    
    ~~~~~~
    ~~~~~~
    
    set target_1 = "aaaaaa"
    set target_2 = "bbbbbb"
    set target_3 = "cccccc"
    set target_4 = "dddddd"
    set target_5 = "eeeeee"
    
    for/l %%i in (1,1,5) do (
      echo target_%%1
      具体的な処理　target_%%1
    )
    
[/code]

→内容を修正し、下記のように修正したのですが  
echoで出力されるのは「target_1」となってしまいます  
対応方法ご存知でしたら教えていただきたいです

[code]

    @echo off
    setlocal enabledelayedexpansion
    
    ~~~~~~
    ~~~~~~
    
    set target_1="aaaaaa"
    set target_2="bbbbbb"
    set target_3="cccccc"
    set target_4="dddddd"
    set target_5="eeeeee"
    
    for/l %%i in (1,1,5) do (
      set n=%%1
      echo target_!n!
    
      if exist target_!n! (
         ~~~~
      )
    )
    
[/code]


CC BY-SA 4.0
2021-09-13T04:09:27.233
82453
2021-09-13T10:29:40.413
2021-09-13T05:48:00.833
41188
41188
question
batch-file
windowsバッチファイルで指定した変数で繰り返し実行を行いたい


h.tokiさんがおっしゃるように、`set`では`=`の前後に空白があってはいけません。  
あと、`for`と`/l`の間には空白が無いとエラーになると思います。  
変数`var`の遅延展開には`!var!`を使用します。  
そうして作った名前を変数名としてさらに展開するためにサブルーチンコールを使ってみました。

[code]

    @echo off
    setlocal enabledelayedexpansion
    
    set target_1="aaaaaa"
    set target_2="bbbbbb"
    set target_3="cccccc"
    set target_4="dddddd"
    set target_5="eeeeee"
    
    for /l %%i in (1,1,5) do (
      set n=%%i
      echo target=target_!n!
      call :sub target_!n!
    )
    exit /b
    
    :sub
    echo !%1!
    
[/code]


CC BY-SA 4.0
2021-09-13T05:08:05.657
82456
2021-09-13T05:08:05.657
45045
82453
answer


一般的には[`SHIFT`](https://docs.microsoft.com/ja-jp/windows-
server/administration/windows-
commands/shift)を使用して引数を１つずつずらしていきます。[`CALL`](https://docs.microsoft.com/ja-
jp/windows-server/administration/windows-commands/call)は

[code]

    call [drive:][path]<filename> [<batchparameters>] [:<label> [<arguments>]]
    
[/code]

という構文で、ラベルの後ろに引数を与えることができます。引数は`%1`、`%2`、`%3`…の変数に割り当てられます。なお`CALL`を使わなくても

[code]

    hoge.bat aaaaaa bbbbbb cccccc dddddd eeeeee
    
[/code]

とプロセス起動しても、引数は`%1`、`%2`、`%3`…の変数に割り当てられます。

あとは`SHIFT`で引数をずらしつつ、空になるまでループさせます。

[code]

    @echo off
    call :loop aaaaaa bbbbbb cccccc dddddd eeeeee
    goto :eof
    
    :loop
    if "%1"=="" goto :eof
    
    echo %1
    
    shift
    goto :loop
    
[/code]


CC BY-SA 4.0
2021-09-13T10:29:40.413
82463
2021-09-13T10:29:40.413
4236
82453
answer