Batch file 批处理以输出给定for/L参数的日期列表 请考虑以下代码: @echo off setlocal enabledelayedexpansion FOR /L %%G IN (0,1,19) DO ( set /a "Dday=%_day%+%%G" if %mth% equ sml ( if !Dday! gtr 30 ( set "_day=1" set /a "_month+=1" ) if !_month! gtr 12 ( set "_month=1" set /a "_year+=1" ) ) else ( if %mth% equ big ( if !Dday! gtr 31 ( set "_day=1" set /a "_month+=1" ) if !_month! gtr 12 ( set "_month=1" set /a "_year+=1" ) ) ) echo !Dday!/!_month!/!_year!.txt )

Batch file 批处理以输出给定for/L参数的日期列表 请考虑以下代码: @echo off setlocal enabledelayedexpansion FOR /L %%G IN (0,1,19) DO ( set /a "Dday=%_day%+%%G" if %mth% equ sml ( if !Dday! gtr 30 ( set "_day=1" set /a "_month+=1" ) if !_month! gtr 12 ( set "_month=1" set /a "_year+=1" ) ) else ( if %mth% equ big ( if !Dday! gtr 31 ( set "_day=1" set /a "_month+=1" ) if !_month! gtr 12 ( set "_month=1" set /a "_year+=1" ) ) ) echo !Dday!/!_month!/!_year!.txt ),batch-file,Batch File,考虑以下日期:2016年4月20日 _day=20\u月=04>年=2016年mth=sml 我的输出是: 它将日数从30增加到1。我能知道我做错了什么吗?请告知。谢谢此脚本中有两个问题。首先,正如@SomethingDark指出的,您需要使用_天哪而不是%\u day% 第二,当Dday大于30时,%%G为12。所以你需要的表达式_天!+%%G将是13而不是1 所以你需要像 ... FOR /L %%G IN (0,1,19) DO ( set /a "Dday=!_day!+%%G"

考虑以下日期:2016年4月20日

_day=20
<代码>\u月=04<代码>>年=2016年<代码>mth=sml

我的输出是:


它将日数从30增加到1。我能知道我做错了什么吗?请告知。谢谢

此脚本中有两个问题。首先,正如@SomethingDark指出的,您需要使用
_天哪而不是
%\u day%

第二,当
Dday
大于30时,
%%G
为12。所以你需要
的表达式_天!+%%G
将是13而不是1

所以你需要像

...
FOR /L %%G IN (0,1,19) DO (

set /a "Dday=!_day!+%%G"

if !_day! equ 1 set /a "Dday=!_day!+%%G-12"
...

你知道,纯批处理在日期计算上真的很麻烦。几个月31天你会做什么?二月?闰年?你应该考虑,如果不是完全切换到具有正确日期对象的另一种语言,那么至少从一个对象借用。下面是一个Batch+PowerShell混合示例:


#将“startdate”环境变量值强制转换为datetime对象
[datetime]$d=$env:startdate
对于($i=0;$i-le$env:daysToAdd;$i++){
$d.addDays($i).toString(“dd-MM-yyy”)
}

或者,如果您更喜欢VBScript的速度,这里有一个Batch+VBScript混合示例。它允许的日期输入可能不如PowerShell灵活,但它几乎可以立即执行


如果不是IsDate(WSH.Arguments(0)),则
WSH.StdErr.WriteLine(“不是有效日期”)
WSH.Quit(1)
如果结束
d=CDate(WSH.Arguments(0))
对于i=0到WSH.Arguments(1)
d2=日期添加(“d”,i,d)
WSH.Echo(日(d2)和“-”月(d2)和“-”年(d2))
下一个

或者,如果您更熟悉JavaScript语法,您可以使用Batch+JScript混合解决方案

@如果(@code节==@Batch)@那么
@echo off和setlocal
如果“%~1”==”“(
回显用法:%~nx0开始日期
后藤:EOF
)
设置“startdate=%~1”
设置“daysToAdd=19”
rem//计算VBScript混合代码并将输出捕获为%%I
对于/f“delims=”%%I in(
'cscript/nologo/e:JScript“%~f0”“%startdate%”“%daysToAdd%”
)做(
rem//在此处使用%%I执行一些有用的操作
echo%%I.txt
)
后藤:EOF
@结束//结束批处理/开始JScript
Date.prototype.addDays=函数(num){
this.setDate(this.getDate()+num);
归还这个;
}

对于(var i=0;i
%\u day%
需要
!\u day!
谢谢,解决了我最初的问题。非常感谢!一些黑暗的东西解决了我最初的问题,而不是将我引向第二个问题。非常感谢你们两位