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