Arquivo em lote para pesquisar uma nova pasta em arquivos

3

Eu quero escrever um arquivo em lote que é acionado sempre que um novo arquivo é adicionado a uma pasta específica.

Eu posso agendar uma tarefa usando schtasks. Mas estou procurando uma solução baseada em tipo de interrupção, em vez de pesquisa. Existe alguma outra maneira de fazer isso?

    
por patro 07.04.2013 / 12:28

3 respostas

3

Existe uma maneira de fazer o que você quer, ele é chamado iNotify no Linux / Unix, onde o sistema operacional pode executar um script baseado na atividade em um diretório que está "assistindo". Windows e Mac têm funcionalidade semelhante, é chamada por nomes diferentes.

Esta pergunta em stackoverflow abrange todas as opções para os vários sistemas operacionais .

JNotify é uma boa opção que é escrita em Java e pode ser executada em todos os sistemas operacionais. É necessário escrever algum código Java, não tenho certeza se você está procurando por esse tipo de opção.

    
por 07.04.2013 / 13:03
2

O lote não pode pesquisar, mas você pode tentar este 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
    
por 07.04.2013 / 14:39
0

Nós usamos a ferramenta no link para fazer exatamente isso. É um aplicativo do Windows que inclui um aplicativo gerenciador fácil de usar para permitir fácil configuração. Além disso, existe uma opção de configuração XML. A pesquisa de pasta real é executada como um serviço do Windows (portanto, inicia automaticamente em cada reinicialização). Quando um novo arquivo é detectado em uma pasta pesquisada, um aplicativo pode ser iniciado automaticamente (você pode especificar seus próprios argumentos de linha de comando personalizados). Pode fazer outras coisas como copiar / mover arquivos também. Além disso, a atividade pode ser registrada em um arquivo de log e há outras operações avançadas. Note que esta é uma ferramenta comercial (ou seja, não gratuita).

    
por 27.08.2015 / 09:51