3

假设我的目录包含这些文件

dir C:\data\
Statistics_A-1-1_2012-10-21 00_10_19.csv
Statistics_B-1-1_2012-10-21 00_12_01.csv

如何批量编写脚本来获取今天的日期并获取其中包含该日期的所有文件。如果文件缺少标签 A-1-1 或标签 B-1-1,它应该为该标签的丢失文件打印错误。理想情况下,我想提供一个日期范围作为脚本的参数。如果未提供,则默认为今天的日期

我习惯于 bash 和 Windows 编程新手。我也没有任何可用的脚本语言,例如 perl、python 等。任何帮助表示赞赏。干杯。

4

2 回答 2

3

获取日期部分的最简单方法是使用 WMIC。(因为您没有提到要对文件执行的操作,此处仅列出):

编辑版本:

   @echo off
    FOR /F "skip=1 eol=D tokens=1,2,3 delims= " %%A IN ('WMIC Path Win32_LocalTime Get Year^,Month^,Day /Format:table') DO (
            SET TODAY=%%A-%%B-%%C
            setlocal ENABLEDELAYEDEXPANSION
            if [!TODAY!] NEQ [--] (
                goto :(endOfLoop^)
            )
            endlocal

    )
    :(endOfLoop^)
    echo %TODAY%

        DIR /B "Statistics_A-1-1_%TODAY% *.csv"
        DIR /B "Statistics_B-1-1_%TODAY% *.csv"
于 2012-11-06T08:03:46.423 回答
3
@echo off
for /F "tokens=1-3 delims=/" %%a in ("%date%") do set today=%%c-%%a-%%b
for %%a in (*%today%*.csv) do (
   for /F "tokens=2 delims=_ " %%b in ("%%a") do (
      if %%b equ %today% (
         echo %%a       ERROR: Missing tab
      ) else (
         echo %%a
      )
   )
)

您可以通过这种方式使用 Julian Day Numbers 处理一系列日期:

set startJDN=Julian Day Number of start of range
set endJDN=Julian Day Number of end of range
for %%a in (*%today%*.csv) do (
   set fileJDN=Julian Day Number of file %%a
   if !fileJDN! geq %startJDN% if !fileJDN! leq %endJDN% (
      echo The file is in range, process it...
   )
)

请参阅此帖子:用于移动文件的 Bat 文件

于 2012-11-06T21:28:33.657 回答