1

こんにちは、誰でもこの問題で私を助けてくれますか?

複数のファイルを作成する必要がありますか?? 私はどんな例でも与えます。いくつかのフォルダーで、Folder Records と言います。「レコード」フォルダには、「example2tought1023.au」という名前のファイルが 1 つ含まれています。数字を増やすだけで、同じファイルを複数回生成する必要があります。

この example2tought1023.au example3tought1024.au example4tought1025.au example5tought1026.au のような結果が得られるはずです

これは私が現在持っているものです:

SET count=9

SET filename_1=example
SET filename_2=thought

SET extension=.au

SET start_1=2
SET start_2=1023

SET source=%filename_1%%start_1%%filename_2%%start_2%%extension%

FOR /L %%i IN (1, 1, %count%) DO (
  REM These two lines do not work!
  SET /a n=%start_1%+%%i
  SET /a number_2=%start_2% + %%i

  SET destination=%filename_1%%number_1%%filename_2%%number_2%%extension%

  ECHO %destination%
  REM COPY %source% %destination%
)

PAUSE

しかし、FOR /Lループ内の行は機能しません

4

1 に答える 1

2

どの行が機能していないかを誤認しました:-)

あなたが抱えている問題は、変数が展開されるときに関係しています。パーセントを使用した通常の展開は、行が解析されるときに発生し、括弧で囲まれたDO句を含むFORステートメント全体が一度に解析されます。したがって、次の行

SET destination=%filename_1%%number_1%%filename_2%%number_2%%extension%

ループが実行されるに存在していた%number_1%と%number_2%の値を確認しています。明らかにあなたが望むものではありません。解決策は単純です。遅延拡張(解析時ではなく実行時の値)を使用する必要があります。これを行うには、最初に、を使用して遅延拡張を有効にしsetlocal enableDelayedExpansion、次に。!number_1!の代わりにを使用し%number_1%ます。

変数名と一致していません(nとnumber_1)。

1からカウントするのではなく、0からカウント-1までカウントしたいと思います。

SET / A式で変数を使用する場合、変数を明示的に展開する必要はありません。パーセントや感嘆符なしで変数名を使用できます。ただし、これはSET/Aコマンドでのみ機能します。

各割り当ての間にコンマを使用することにより、単一のSET/Aコマンドで複数の計算と割り当てを実行することもできます。

@echo off
setlocal enableDelayedExpansion

REM counts from 0 to count, so 8 = 9 copies
set count=8

set filename_1=example
set filename_2=thought

set extension=.au

set start_1=2
set start_2=1023

set source=%filename_1%%start_1%%filename_2%%start_2%%extension%

for /L %%i in (0, 1, %count%) do (
  set /a "number_1=start_1+%%i, number_2=start_2+%%i"
  set destination=%filename_1%!number_1!%filename_2%!number_2!%extension%
  echo !destination!
  REM copy %source% !destination!
)

pause
于 2012-08-08T14:47:47.123 に答える