3

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

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

3 ответа3

3

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

Этот вопрос о stackoverflow охватывает все параметры для различных операционных систем.

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

2

Пакет не может опрашивать, но вы можете попробовать этот 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
0

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .