使用數字變數建立檔案名

使用數字變數建立檔案名

我有一個不起作用的腳本:

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"  
)

相關內容