Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
For loop 根据批处理文件中的当前月份,使用FOR/L循环循环一年中的各个月_For Loop_Batch File - Fatal编程技术网

For loop 根据批处理文件中的当前月份,使用FOR/L循环循环一年中的各个月

For loop 根据批处理文件中的当前月份,使用FOR/L循环循环一年中的各个月,for-loop,batch-file,For Loop,Batch File,我试图为我的一个类做一个FOR/L循环,我已经让它循环了12次,但它没有改变MonthName变量以显示每个月。我想要它的是,取当前的月数,执行循环多次,一年中的月份,就像第一次通过循环,我希望它显示1。一月二号。2月等等,直到它到达当前月份这里是我到目前为止的代码和一个示例执行,我只能让它显示当前月份的名称 rem @echo off setlocal enabledelayedexpansion set CurrentMonth=%date:~4,2% IF %currentMonth%

我试图为我的一个类做一个FOR/L循环,我已经让它循环了12次,但它没有改变MonthName变量以显示每个月。我想要它的是,取当前的月数,执行循环多次,一年中的月份,就像第一次通过循环,我希望它显示1。一月二号。2月等等,直到它到达当前月份这里是我到目前为止的代码和一个示例执行,我只能让它显示当前月份的名称

rem @echo off 
setlocal enabledelayedexpansion
set CurrentMonth=%date:~4,2%
IF %currentMonth% EQU 08 (
         set /a currentMonth=8
         )
IF %currentMonth% EQU 09 (
         set /a currentMonth=9
       ) 
 set Mmap=1-Januray;2-Febuary;3-March;4-April;5-May;6-June;7-July;8-August;9-September;10-October;11-November;12-December;
FOR /L %%x in (1,1,!CurrentMonth!) DO  (
           call set MonthName=%%Mmap:*%%x-=%%
           set MonthName=%MonthName:;=&rem.%
           echo %%x !MonthName! )

C:\Users\cis106stu\BATCHFILES5>FORLOOP
1 December
2 December
3 December
4 December
5 December
6 December
7 December
8 December
9 December
10 December
11 December
12 December

C:\Users\cis106stu\BATCHFILES5>

我建议一种替代方法,既可以更正日期格式,也可以从字符串Mmap中提取:

注意:%date%的格式是高度用户可配置的,因此%date:~4,2%可能会提取错误的字符串。它适用于DDD MM/dd/yyyy格式,并且必须适应其他格式。更好地使用a

只需使用for/l循环和循环12次,即可获得我们设置的变量和wmic,以确定您所在的月份

@echo off
set "m1=January" & set "m2=February" & set "m3=March" & set "m4=April" & set "m5=May" & set "m6=June" & set "m7=July" & set "m8=August" & set "m9=September" & set "m10=October" & set "m11=November" & set "m12=December"
for /f %%i in ('wmic path win32_localtime get month ^| findstr /r /c:[1-12]') do for /l %%a in (1,1,12) do if %%a leq %%i call echo %%a %%m%%a%%%
上述情况不要求将CurrentMonth变量设置为元变量%%i具有该值。但是,如果仍要设置变量,可以:

@echo off
set "m1=January" & set "m2=February" & set "m3=March" & set "m4=April" & set "m5=May" & set "m6=June" & set "m7=July" & set "m8=August" & set "m9=September" & set "m10=October" & set "m11=November" & set "m12=December"
for /f %%i in ('wmic path win32_localtime get month ^| findstr /r /c:[1-12]') do set /a CurrentMonth=%%i
for /l %%a in (1,1,12) do if %%a leq %CurrentMonth% call echo %%a %%m%%a%%%
当您坚持使用for/l循环时:

我加了一个前导;对于Mmap,使用另一种方法拆分字符串并利用延迟扩展,为什么不在您已经启用它的情况下使用它呢


注意:%date%的格式是高度用户可配置的,因此%date:~4,2%可能会提取错误的字符串。它适用于DDD MM/dd/yyyy格式,并且必须适用于其他格式更好地使用a

请查看您的问题,发布的代码不会生成您的输出fyi,您用于检索日期的方法取决于用户和/或PC的配置。如果您仍然愿意使用它,我建议%DATE:~-10,2%在比%DATE:~4,2%更多的PC上成功,因为很多地区都没有在短日名称前加上。谢谢你的回答,这很有意义,但我需要使用for/L循环来做这件事,也谢谢你在第一时间编辑我的问题,我试图让它看起来像那样,但我是一个电脑新手现在我刚刚开始今年夏天只是一个假设,我在@Stephan,但我认为%date:~4,2是根据ddd mm/dd/yyy格式正确选择月份的。@Compo:您可能是对的。更改为OP的编号并修改了注释。感谢您更新的答案,非常有效。我了解您所做的一切再次感谢您当您的问题解决后,请将问题从开放队列中删除。
@echo off
set "m1=January" & set "m2=February" & set "m3=March" & set "m4=April" & set "m5=May" & set "m6=June" & set "m7=July" & set "m8=August" & set "m9=September" & set "m10=October" & set "m11=November" & set "m12=December"
for /f %%i in ('wmic path win32_localtime get month ^| findstr /r /c:[1-12]') do set /a CurrentMonth=%%i
for /l %%a in (1,1,12) do if %%a leq %CurrentMonth% call echo %%a %%m%%a%%%
@echo off 
setlocal enabledelayedexpansion
set /a CurrentMonth=1%date:~4,2%-100

set "Mmap=;1-Januray;2-Febuary;3-March;4-April;5-May;6-June;7-July;8-August;9-September;10-October;11-November;12-December;"

FOR /L %%x in (1,1,!CurrentMonth!) DO  (
  set MonthName=!Mmap:*;%%x-=!
  for /f "delims=;" %%y in ("!MonthName!") do echo %%x %%y 
)