VBScript для автоматического поиска и перемещения файлов - PullRequest
1 голос
/ 06 января 2012

Мне было поручено попытаться автоматизировать задачу на работе, потому что в последнее время у нас возникали проблемы с людьми, не забывшими это делать.

В общем, вот что мне нужно для выполнения сценария:

  1. Получить дату предыдущего дня в формате ГГГГММДД
  2. Введите папку с таким именем
  3. Поиск во всех папках под этим местоположением для 4 конкретныхфайлы
  4. Скопируйте эти файлы в несколько разных мест

У меня проблема в том, что для 4 файлов, которые я ищу, они находятся в 2 разных папках,3 в 1, 1 в другой.Имена этих папок меняются ежедневно, в зависимости от того, в какую очередь они попадают, когда генерируются каким-либо другим программным обеспечением.Мне нужно, чтобы эти файлы были перемещены, чтобы на них можно было запустить другой скрипт.У меня проблемы с выяснением, как это сделать.У кого-нибудь есть идеи?

1 Ответ

1 голос
/ 06 января 2012

Если папки, содержащие интересные файлы, являются подпапками вашего устаревшего каталога, вы можете использовать вложенный цикл:

  Dim sDFolder : sDFolder    = "..\data\20110105"
  Dim dicFiNa  : Set dicFiNa = CreateObject("Scripting.Dictionary")
  dicFiNa("1.txt") = ""
  dicFiNa("3.txt") = ""
  dicFiNa("5.txt") = ""
  Dim oRDir     : Set oRDir  = goFS.GetFolder(sDFolder)
  Dim oSDir
  For Each oSDir In oRDir.SubFolders
      Dim oFile
      For Each oFile In oSDir.Files
          WScript.Echo "looking at", oFile.Path
          If dicFiNa.Exists(oFile.Name) Then
             WScript.Echo "found", oFile.Name, "will copy"
          End If
      Next
  Next

выход:

looking at E:\trials\SoTrials\answers\8750206\data\20110105\whatever\6.txt
looking at E:\trials\SoTrials\answers\8750206\data\20110105\whatever\5.txt
found 5.txt will copy
looking at E:\trials\SoTrials\answers\8750206\data\20110105\unknown\4.txt
looking at E:\trials\SoTrials\answers\8750206\data\20110105\unknown\3.txt
found 3.txt will copy
looking at E:\trials\SoTrials\answers\8750206\data\20110105\puzzle\2.txt
looking at E:\trials\SoTrials\answers\8750206\data\20110105\puzzle\1.txt
found 1.txt will copy

Полная рекурсивная прогулка будет немного более сложной, так что, скажем так, если вам это нужно.


Просто для удовольствия: рекурсивная версия:

  Dim sDFolder : sDFolder    = "..\data\20110105"
  Dim dicFiNa  : Set dicFiNa = CreateObject("Scripting.Dictionary")
  dicFiNa("1.txt")  = ""
  dicFiNa("3.txt")  = ""
  dicFiNa("55.txt") = ""
  Dim oRDir     : Set oRDir  = goFS.GetFolder(sDFolder)
  walk oRDir, dicFiNa, "whatever you need to copy the files"

Sub walk(oDir, dicFiNa, vCargo)
  Dim oItem
  For Each oItem In oDir.Files
      WScript.Echo "looking at", oItem.Path
      If dicFiNa.Exists(oItem.Name) Then
         WScript.Echo "found", oItem.Name, "will copy"
      End If
  Next
  For Each oItem In oDir.SubFolders
      walk oItem, dicFiNa, vCargo
  Next
End Sub

выход:

looking at E:\trials\SoTrials\answers\8750206\data\20110105\whatever\6.txt
looking at E:\trials\SoTrials\answers\8750206\data\20110105\whatever\5.txt
looking at E:\trials\SoTrials\answers\8750206\data\20110105\unknown\4.txt
looking at E:\trials\SoTrials\answers\8750206\data\20110105\unknown\3.txt
found 3.txt will copy *
looking at E:\trials\SoTrials\answers\8750206\data\20110105\puzzle\2.txt
looking at E:\trials\SoTrials\answers\8750206\data\20110105\puzzle\1.txt
found 1.txt will copy *
looking at E:\trials\SoTrials\answers\8750206\data\20110105\puzzle\deep\deeper\55.txt
found 55.txt will copy *

(*), как только проблема с разрешением будет решена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...