我有一個不起作用的腳本:
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
循環該做什麼。您需要另一個循環變數 ( %%D
) 才能正常運作。我懷疑您正在嘗試輸出文件 Day_1.txt、Day_2.txt 等的行,但我認為它不會按照當前編寫的方式工作,特別是如果您需要先創建文件的話。
編輯回應 evianton 答案所附評論:
您沒有在原始問題中指定需要兩位數的天數。下面的程式碼(從 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"
)