Command line CMD/BAT-帮助确定36天前的日期

Command line CMD/BAT-帮助确定36天前的日期,command-line,date,batch-file,Command Line,Date,Batch File,每天晚上我都需要在一个从当前日期起36天的文件夹上工作。我有一个系统,可以将文件写入如下的日常结构。我需要在本地磁盘上保存35天的数据,因此每天晚上我都需要归档第36天的数据。这是踢球者。。。每天大约有200万个文件,因此我无法高效地扫描整个2009文件夹,只能移动35天以上的文件。我需要做的是,通过批处理脚本确定36天以前的文件夹路径,然后应用我的归档逻辑。我有脚本要确定,但在36天大的时候做决定有困难。必要时,如果没有批处理方法,我可以使用perl--肖恩 文件夹结构如下所示: 2009\0

每天晚上我都需要在一个从当前日期起36天的文件夹上工作。我有一个系统,可以将文件写入如下的日常结构。我需要在本地磁盘上保存35天的数据,因此每天晚上我都需要归档第36天的数据。这是踢球者。。。每天大约有200万个文件,因此我无法高效地扫描整个2009文件夹,只能移动35天以上的文件。我需要做的是,通过批处理脚本确定36天以前的文件夹路径,然后应用我的归档逻辑。我有脚本要确定,但在36天大的时候做决定有困难。必要时,如果没有批处理方法,我可以使用perl--肖恩

文件夹结构如下所示:

2009\07\01
2009\07\02
2009\07\03
.
.
.
2009\08\01
2009\08\02
2009\08\03
for /f %%d in ('cscript //nologo datediff.vbs') do set dt=%%d
@编辑:海伦的好答案让我有99%的成功率。我唯一的问题是vbs中的月份和日期没有填充零,我必须在文件夹结构中处理零。如果一天或一个月少于10,是否有人有一个简单的方法来填充前导0

以下是我目前正在做的事情:

for /F "tokens=1-3 delims=/" %%x in ('cscript //nologo get36thday.vbs') do (
   SET YYYY=%%z
   SET MM=%%x
   SET DD=%%y)

除了%MM%最终是7而不是07之外,批处理选项非常糟糕,您需要根据运行while循环倒计时的天数来计算它的月份。我强烈推荐perl,因为它只需要几行代码

使用CPAN中的DateTime模块


确定日期的批处理方式过于复杂;使用脚本来实现这一点要容易得多。抱歉,没有Perl示例,只有VBScript示例:

WScript.Echo DateAdd("d", Date, -36)
您可以从批处理文件调用此脚本,并按如下方式读取计算日期:

2009\07\01
2009\07\02
2009\07\03
.
.
.
2009\08\01
2009\08\02
2009\08\03
for /f %%d in ('cscript //nologo datediff.vbs') do set dt=%%d

如果你像我一样带着谷歌来到这里:
要修复.vbs中的前导零,我在前面添加一个零,并去掉右边的2个字符。
“0”和“7”->“07”和“0”和“14”->“14”

OldDateCode.vbs:

OldDate = DateAdd("d", Date, -36)
DateCode = Year(OldDate) & Right("0" & Month(OldDate), 2) & Right("0" & Day(OldDate), 2)
WScript.Echo DateCode
我还想保留本月的第一个文件夹,因此我将最后两位数字(天)与“01”进行比较
第一天要检查的VBS代码:

If Right(DateCode, 2)="01" then
  WScript.Echo "The 1st:" & vbCrLf & DateCode
Else
  WScript.Echo "Not the 1st:" & vbCrLf & DateCode
End If
CheckDate.bat:

@Echo Off
Set Folder=D:

for /f %%d in ('cscript //nologo OldDateCode.vbs') do set OldDateCode=%%d

If "%OldDateCode:~6,7%"=="01" (
  Echo "Old Backup: %OldDateCode% 1st of the month: keeping..."
) ELSE (
  Echo "Old Backup: %OldDateCode% not the 1st of the month: removing..."
  RD /S /Q "%Folder%\%OldDateCode%"
)
pause
在D:\中创建一个日期代码为36天前的文件夹。玩一下-36和日期代码