Назад | Перейти на главную страницу

найти файл новее, чем вчера, используя пакетный скрипт

Я пытаюсь написать пакетный сценарий, который может найти файлы, созданные / измененные / более новые со вчерашнего дня и / или в любой конкретный день с сегодняшнего дня в определенной папке. Затем эти файлы необходимо скопировать в другое место.

Я пытался использовать forfiles команда, но в моем XP этой команды нет.

Любая помощь была бы потрясающей!

Вы можете использовать превосходное качество Хорста Шеффера. wasfile.exe инструмент:

for /r c:\particular_folder %i in (*.*) do @wasfile.exe %i created after Today-1 > nul && @copy %i f:\different_location

Ты можешь измениться создан и модифицированный по вашим потребностям:

WasFile, ver. 2.2 (c) 2006-2007, Horst Schaeffer
compares ..
    the time&date of two files (or directories),
    the date only, time ignored
    the date of a file with TODAY-n (days)
    the time&date of a file with NOW-n (minutes)
Examples:
    WasFile this.zip created before that.zip
    WasFile this.zip modified after today-8
Syntax:
    WasFile File1 [Stamp] [not] before|after|sametime File2 [Stamp] [Option]
    WasFile File1 [Stamp] [not] before|after|sametime today-n [Option]
    WasFile File1 [Stamp] [not] before|after|sametime now-n
Stamp is either:
    created, modified (default) or accessed
    (by default second stamp = first stamp)
Options to compare date only, ignore time:
    /DateLocal or /DateUTC
    (if TODAY is used, default is /DateLocal)
Result by errorlevel:
    0: true, 1: false, 255: error (message to STDERR)

кстати, когда вы ставите (.), значит ли это искать любой формат / вид файла? могу я просто поставить * .csv вместо поиска только файла csv?

Я думаю, вы имеете в виду (*. *)? Да, это говорит вам, какой набор вас интересует. * .Csv будет изолировать только файлы csv.

также почему вы используете @ wasfile.exe, nul, @ copy и переключатель% i (два места)

Вам может быть полезно прочитать некоторые веб-сайты в качестве справочной информации:
http://www.netikka.net/tsneti/http/tsnetihttpprog.php#batch
http://www.netikka.net/tsneti/info/tscmd.php

Google пакетный учебник для большего количества сайтов.

В пакетном файле @command означает, что командная строка не выводится на экран. В противном случае вы увидите как то, что вы просили, так и результат. В && означает «обработать то, что следует, если команда успешна» и определяет это с помощью уровень ошибки. Если бы я хотел «не удалось», я бы использовал ||.

В этом случае вы читаете код как: Является ли файл более новым, чем моя намеченная дата, и если да (&&), скопируйте его в какое-нибудь место. Не показывать мне вывод моей команды "> nul"
ОК?

Этого легко достичь с помощью VBScript с его функциями GetFile () и DateDiff (). VBScript является родным для XP.

Option Explicit
On Error Resume Next
Err.Clear

processFolder "c:\temp"

WScript.Quit


Function processFolder( strPath )

    On Error Resume Next

    Dim objFSO
    Dim objFolder
    Dim intRc
    Dim colFiles
    Dim objFile

    intRc = 0

    Set objFSO = CreateObject( "Scripting.FileSystemObject" )
    If Err.Number <> 0 Then
        intRc = -1
        Err.Clear
    Else

        Set objFolder = objFSO.GetFolder( strPath )
        If Err.Number <> 0 Then
            intRc = -2
            Err.Clear
        Else

            Set colFiles = objFolder.Files
            If Err.Number <> 0 Then
                intRc = -3
                Err.Clear
            Else

                For Each objFile in colFiles
                    checkFile strPath, objFile.Name, (24 * 60 * 60)
                Next

                Set colFiles = Nothing
            End If

            Set objFolder = Nothing

        End If

        Set objFSO = Nothing
    End If

processFolder = intRc

End Function



Function checkFile( ByVal strPath, strName, intThreshold )

    On Error Resume Next

    Dim objFSO
    Dim objFile
    Dim intRc
    Dim strFileName
    Dim intModificationPeriodSecs
    Dim objDateLastModified

    intRc = 0
    strFileName = strPath & "\" & strName

    Set objFSO = CreateObject( "Scripting.FileSystemObject" )
    If Err.Number <> 0 Then
        intRc = -1
        Err.Clear
    Else

        Set objFile = objFSO.GetFile( strFileName )
        If Err.Number <> 0 Then
            intRc = -2
            Err.Clear
        Else

            'intRc = objFile.Size
            objDateLastModified = objFile.DateLastModified
            intModificationPeriodSecs = DateDiff( "s", objDateLastModified, Now )

            If intModificationPeriodSecs > intThreshold Then
                WScript.Echo "File [" & strFileName & "] last modified [" & intModificationPeriodSecs & "] seconds ago."
            End If

            Set objFile = Nothing

        End If

        Set objFSO = Nothing
    End If

checkFile = intRc

End Function