Пакетный файл для опроса папки на наличие новых файлов

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

Я могу запланировать задачу с помощью schtasks. Но я ищу решение, основанное на прерывании, а не на опросе. Есть ли другой способ сделать это?

10
задан Lorenzo Von Matterhorn
07.03.2023 20:37 Количество просмотров материала 3350
Распечатать страницу

3 ответа

есть способ делать то, что вы хотите, это называется iNotify в Linux/Unix, где ОС может запускать скрипт на основе активности в каталоге, который она "наблюдает". Windows и Mac имеют схожую функциональность, они называются по-разному.

этой вопрос о stackoverflow охватывает все варианты для различных ОС.

JNotify хороший вариант, который написан на Java и может работать на всех операционках. Это требует написания кода на Java, не конечно, если вы ищете такой вариант.

3
отвечен slm 2023-03-09 04:25

пакет не может опрашивать, но вы можете попробовать этот VBScript:

Option Explicit

Const Path = "%userprofile%\Documents\Folder"
Const Interval = 1
Const Delay = 60

Dim oWSH, oFSO, oWMI, oEvent, oTarget, colEvents
Dim sPath, sDrive, sFolder, sNewPath

Set oWSH = CreateObject("WScript.Shell")
Set oFSO = CreateObject("Scripting.FileSystemObject")
oWSH.CurrentDirectory = oFSO.GetParentFolderName(WScript.ScriptFullName)
sPath = oWSH.ExpandEnvironmentStrings(Path)
sPath = oFSO.GetAbsolutePathName(sPath)
If Not oFSO.FolderExists(sPath) Then oFSO.CreateFolder(sPath) 
sDrive = oFSO.GetDriveName(sPath)
sFolder = Replace(Mid(sPath, 3) & "\", "\", "\", 1, -1, vbTextCompare)

Set oWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\.\root\cimv2")
Set colEvents = oWMI.ExecNotificationQuery( _
  "SELECT * FROM __InstanceCreationEvent" _
  & " WITHIN " & CStr(Interval) _
  & " WHERE Targetinstance ISA 'CIM_DataFile'" _
  & " AND TargetInstance.Drive='" & sDrive & "'"_
  & " AND TargetInstance.Path='" & sFolder & "'") 

Do 
  Set oEvent = colEvents.NextEvent()
  sNewPath = Year(Now) & "_" & Right("0" & Month(Now), 2) & "_" & Right("0" & Day(Now), 2)
  sNewPath = oFSO.BuildPath(sPath, sNewPath)
  If Not oFSO.FolderExists(sNewPath) Then oFSO.CreateFolder(sNewPath)
  Set oTarget = oEvent.TargetInstance
  WScript.Sleep Delay * 1000
  On Error Resume Next
  oFSO.MoveFile oTarget.Name, oFSO.BuildPath(sNewPath, oFSO.GetFileName(oTarget.Name))
  On Error Goto 0
Loop
2
отвечен Endoro 2023-03-09 06:42

мы используем инструмент вhttp://www.myassays.com/folder-poll сделать как раз это. Это приложение для Windows, которое включает в себя удобное приложение диспетчера для легкой настройки. Кроме того, существует опция конфигурации XML. Фактический опрос папок выполняется как служба Windows (поэтому запускается автоматически при каждом перезапуске). При обнаружении нового файла в опрашиваемой папке приложение может быть запущено автоматически (можно указать собственные аргументы командной строки). Он может делать другие вещи, такие как копирование/перемещение файлов тоже. Кроме того, деятельность может быть записан в файл журнала и есть другие дополнительные операции. Обратите внимание, что это коммерческий инструмент (т. е. не бесплатно).

0
отвечен Mister Cook 2023-03-09 08:59

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя

Похожие вопросы про тегам:

batch
batch-file
command-line
ftp
windows
Вверх