動作しないスクリプトがあります:
set /a num=0
for /L %%C in (1,1,31) do (
set /a num+=1
set day=%num%
for /r %%1 in ("Folder\Day_%num%.txt") do echo %num%
)
ループで生成される 1 から 31 までの数字を、ファイル名の作成に使用できる文字列変数にする必要があります。私の場合、この目的のためにパラメータ %%C または数値変数 "num" の両方を使用するのに問題があります。関心のある数字を保持する文字列変数 "day" を設定しようとしましたが、まだ機能しません。理由がわかりません。修正を手伝ってください。
答え1
あなたが本当にやりたいことをよく理解できたかどうかわかりませんが、名前に要求された番号を含む空のファイルを作成するコードを以下に示します。これがあなたが求めている答えではない場合は、要求をより具体的にしてください。
FOR /L %%C IN (1,1,31) DO (
ECHO. >> "Folder\Day_%%C.txt"
)
注意: 「フォルダー」ディレクトリが存在することを確認してください。
答え2
スクリプトが複雑になりすぎていると思います。次のことを試してください。
for /L %%C in (1,1,31) do (
for /r %1 %%D in ("Folder\Day_%%C.txt") do echo %%D
)
いくつかの注意事項:
バッチは、次の場合を除いてすべての変数を文字列として扱います。/a を設定する。
for /L
自動的にカウントされるので、追加の加算を行う必要はありません。
%%C
ループに必要な二重パーセント構文( )と、コマンドラインからスクリプトに渡される引数にアクセスするために使用するfor
単一パーセント構文( )を混同するのは簡単です。コマンドライン引数は%1
のみ単一パーセント構文を使用します。
for
2 番目のループが何をするはずなのかわかりません。%%D
これを機能させるには、別のループ変数 ( ) が必要でした。Day_1.txt、Day_2.txt などのファイルの行を出力しようとしているのではないかと思いますが、特に最初にファイルを作成する必要がある場合は、現在の記述方法では機能しないと思います。
evianton の回答に添付されたコメントへの返信として編集:
元の質問では、2 桁の日数が必要であることを指定していませんでした。以下のコード (evianton から変更) でその問題は解決するはずです。
@echo off
setlocal enabledelayedexpansion
for /l %%C in (1,1,31) do (
set num=%%C
if %%C lss 10 set num=0%%C
echo. >> "Folder\Day_!num!.txt"
)