使用数字变量创建文件名

使用数字变量创建文件名

我有一个不起作用的脚本:

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 的回答所附的评论进行编辑:

您在原始问题中没有指定需要 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"  
)

相关内容