encontra arquivo mais recente que ontem usando script em lote

2

Estou tentando gravar um script em lote que pode encontrar os arquivos criados / modified / newer desde ontem e / ou qualquer dia específico de hoje em uma determinada pasta. Então, esses arquivos precisam ser copiados para um local diferente.

Eu tentei usar o comando forfiles , mas meu XP não tem esse comando.

Qualquer ajuda seria incrível!

    
por newbie 03.11.2011 / 20:03

2 respostas

1

Você pode usar a excelente ferramenta wasfile.exe do Horst Schaeffer:

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

Você pode alterar criado e modificado conforme sua necessidade:

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)

by the way when you put (.), does it mean look for any format/kind of the file? can i just put *.csv instead to search csv file only?

Eu acho que você quer dizer (*. *)? Sim, isso indica em qual conjunto você está interessado. * .Csv isolaria apenas os arquivos csv.

also why are you using @wasfile.exe, nul, @ copy and switch %i (two places)

Você pode se beneficiar da leitura de alguns sites em segundo plano: link
link

Google tutorial em lote para mais sites.

Em um arquivo de lote, @command significa que a linha de comando não é exibida na tela. Caso contrário, você verá o que pediu e qual foi o resultado. O & & significa "processar o que se segue se o comando for bem-sucedido" e determina isso por errorlevel . Se eu quisesse 'não foi bem sucedido' eu teria usado || .

Nesse caso, você lê o código como: É o arquivo mais recente que a data prevista e, se sim (& &), copia-o para algum local. Não me mostre nenhuma saída do meu comando "> nul"
 OK?

    
por 04.11.2011 / 17:23
0

Isso é facilmente conseguido usando o VBScript, com suas funções GetFile () e DateDiff (). O VBScript é nativo do 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
    
por 11.08.2012 / 23:00