以特定日期/时间顺序循环遍历文件的批处理文件

时间:2016-01-14 23:12:51

标签: date batch-file for-loop

循环使用特定日期/时间顺序中的文件

大家好,

我正在努力为我已经使用了一段时间的批处理文件写一小部分内容。首先,这里是我要处理的一些示例文件名:

output.log, output.log.1, output.log.2, ..., outlput.log.199

输入文件集可能只包含上述文件中的一个或几个(始终按所示顺序排列,最新,最后一个)或所有200个文件。

我想做什么

批处理文件用于对这些文件执行多项操作,例如将它们复制到新目录中,或创建参数列表以将其传递到另一个命令。一般来说,我的工作做得很好,它当时做了我想要的,然而,处理潜在文件集中的所有200个文件是耗时的。我现在要做的是限制进程文件的数量,仅提取第一个,比如20个文件,或者(如果少于20个文件),全部。

我遇到的问题是我使用的FOR循环按名称顺序循环文件,而不是日期/时间顺序。因此,如果我在20次迭代后停止,我最终得到:

output.log, output.log.1, output.log.10, outlput.log.100, outlput.log.101, ...

我需要能够按日期/时间顺序循环遍历文件集(最新的第一个)。我不知道日期范围是什么,或者文件是否按特定时间间隔,只是日志文件将始终按照第一个列表。

我的代码

setlocal EnableDelayedExpansion

Set SnapDir=C:\Snaps\
Set SupportLog=unified_support.log
Set LogDir=\var\log
Set ParsedLogDir=\var\log\parsed
set PARAMS=
set /A NumberSupportFiles=20
Set /A StartSupportCount=0

if [%1]==[] goto :eof
:loop

rem Create a Parameter list of all the Log files, Copy File then stop after a set number of interations
for %%A in ("%SnapDir%%~n1%LogDir%\%SupportLog%*") do (
    set PARAMS=!PARAMS! "%%A"
    copy %%A "%SnapDir%%~n1%ParsedLogDir%\"
    set /A StartSupportCount+=1
    if !StartSupportCount! EQU %NumberSupportFiles% goto :jump
)

:jump

pause

如前所述,这种方法有效,它循环遍历文件集中的前20个文件,但文件顺序是按名称而不是日期/时间。

从我到目前为止所读到的内容来看,任何日期/时间操作似乎都需要一个精确的参考点或特定的分隔符,并且在循环之前我无法看到订购该集合的方法。这可能吗?

1 个答案:

答案 0 :(得分:2)

你差不多完成了,你只需要用dir /B A:-D /O:-D来替换@echo off setlocal EnableExtensions EnableDelayedExpansion Set "SnapDir=C:\Snaps\" Set "SupportLog=unified_support.log" Set "LogDir=\var\log" Set "ParsedLogDir=\var\log\parsed" set "PARAMS=" set /A NumberSupportFiles=20 Set /A StartSupportCount=0 if "%~1"=="" goto :EOF :LOOP rem Create a Parameter list of all the Log files, rem Copy File then stop after a set number of interations for /F "eol=| delims=" %%A in (' dir /B /A:-D /O:-D "%SnapDir%%~n1%LogDir%\%SupportLog%*" ') do ( set "PARAMS=!PARAMS! "%%~A"" copy "%SnapDir%%~n1%LogDir%\%%~A" "%SnapDir%%~n1%ParsedLogDir%\" set /A StartSupportCount+=1 if !StartSupportCount! EQU %NumberSupportFiles% goto :JUMP ) :JUMP pause endlocal exit /B 循环,它解析extensions [rnd] to makeNW-BA clear-all let new-edges 4 let popn 25 create-turtles new-edges [ setxy random-xcor random-ycor ] ask turtles [ create-links-with other turtles with [not link-neighbor? myself] ] repeat popn - count turtles [ let targets rnd:weighted-n-of new-edges turtles [ count my-links ] create-turtles 1 [ setxy random-xcor random-ycor create-links-with targets ] ] end 的输出,它构成按修改日期排序的文件列表。降序(最新的第一个):

let targets rnd:weighted-n-of degree turtles [ count my-links ]