我有一个不起作用的脚本:
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"
)