使用批处理脚本

时间:2016-07-13 01:46:06

标签: batch-file

我有一个文本文件data.txt

Jun/2015: 1028
Oct/2017: 2048
Jan/2010: 9654
Aug/2006: 5702
Feb/2018: 1984
Oct/2012: 7749
May/2008: 4722
Jul/2016: 4722

我需要一个BATCH脚本:

  1. 在文件中查找MIN,MAX值,输出为:
    • 最大值为[最大值后的最大值]#,最后值的最后值
    • MIN的值是[最小值":"],[最小值的日期]
  2. 按值的DATE对文件data.txt进行排序(将DATE的月份和年份分开,而不仅仅是月份或年份)
  3. 将文件中的DATE与当前DATE进行比较,如果文件中的DATE大于08月以上的当前日期,则在"之后输出带有值的DATE:"
  4. 查找月份最长的月份(月份31天),并在"之后输出带有值的日期:"

2 个答案:

答案 0 :(得分:0)

  • 您可以通过for / f tokens = 1,2获取文本中的值,并按a-z对结果进行排序,获取文本中的第一行或最后一行,例如最大或最小行。

答案 1 :(得分:0)

为了计算最小值和最大值,您可以使用以下脚本(也确定舍入均值);认为这只适用于签名的32位房间中的正整数;我们称之为stats.bat

@echo off
setlocal EnableExtensions EnableDelayedExpansion

set /A "IDX=0, SUM=0"
set /A "MIN=(1<<31)-1, MAX=0"
for /F "usebackq tokens=1,2 delims=: " %%K in ("%~1") do (
    for /F "tokens=* delims=0" %%Z in ("%%L") do set "VAL=%%Z"
    set /A "VAL+=0, IDX+=1, SUM+=VAL"
    if !MIN! GTR !VAL! set /A "MIN=VAL" & set "MIN_DATE=%%K"
    if !MAX! LSS !VAL! set /A "MAX=VAL" & set "MAX_DATE=%%K"
)
set /A "AVG=(2*SUM+IDX)/(2*IDX)"
echo total amount:  %IDX%
echo overall sum:   %SUM%
echo minimum value: %MIN%   ^(%MIN_DATE%^)
echo maximum value: %MAX%   ^(%MAX_DATE%^)
echo average value: %AVG%   ^(rounded^)

endlocal
exit /B

要使用它,请将文本文件作为命令行参数提供:

stats.bat "\path\to\data.txt"

对于问题中包含的示例文件data.txt,输出将如下所示:

total amount:     8
overall sum:      37609
minimum value:    1028    (Jun/2015)
maximum value:    9654    (Jan/2010)
average value:    4701    (rounded)

对于所有与日期相关的计算,您应该使用其他语言(如PowerShell),因为cmd / 不支持日期数学,也不支持按日期排序。