none
Bat para vbs (com ftp e localizar verificar existencia de aruivo) RRS feed

  • Pergunta

  • Boa tarde a todos.

    Tenho que criar um vbs para substituir o seguinte bat:

    echo.
    ::############################################################################
    FOR /F "TOKENS=2* DELIMS= " %%A IN ('DATE/T') DO SET CDATE=%%A

    FOR /F "TOKENS=1,1 DELIMS=/ " %%A IN ('echo %CDATE%') DO SET dd=%%A

    FOR /F "TOKENS=1,2 DELIMS=/ " %%A IN ('echo %CDATE%') DO SET mm=%%B

    FOR /F "TOKENS=2,3 DELIMS=/ " %%A IN ('echo %CDATE%') DO SET yyyy=%%B

    ::SET dat=%mm%%dd%%yyyy%
    SET DAT=%YYYY%%MM%%DD%

    ::############################################################################

    7z a -tzip ..\arquivo\cancelamento%dat%.zip ..\arquivo\*.txt
    del ..\arquivo\*.txt
    copy d:\transfs\Cargas_batch\KMV\cancelamento\arquivo\cancelamento%dat%.zip
    ftp -s:comp_cancelamento.txt hermesrj19 > log.tmp
    del cancelamento*.zip

    e incluir para que ele so execute a compactação(7z a -tzip ..\arquivo\cancelamento%dat%.zip ..\arquivo\*.txt) se existir arquivo .txt na pasta senão ele não cria o arquivos .zip(ele esta criando mesmo sem existir nenhum arquivo .txt).

     A parte de inverte a data eu achei:

    dNow = Now

    'separando dia, mes, ano
    yy = Right(Year(dNow), 4)
    mm = Right("00" &Month(dNow), 2)
    dd = Right("00" &Day(dNow), 2)

    data = yy & mm & dd

    terça-feira, 4 de agosto de 2009 15:45

Respostas

  • Colocar a sub no final do seu script e chamar a mesma em qualquer parte do seu script, conforme necessario.
    Ex.: cFTP("\arquivo\" & strNome &".zip")

    Sub cFTP(sLFile)

    const rdir = "mydir"

    Dim fso, ftpo
    set fso = WScript.CreateObject("Scripting.FileSystemObject")
    set ftpo = WScript.CreateObject("InetCtls.Inet.1") 'Msinet.ocx
    ftpo.URL = "ftp://ftp.myftpsite.com"
    ftpo.UserName = "anonymous"
    ftpo.Password = "myname@mymailsite.com"
    ftpo.Execute , "CD " & rdir
    do
     WScript.Sleep 100 'This can take a while loop while ftpo.StillExecuting

     if (fso.FileExists(sLFile)) then
      WScript.Echo "Uploading " & sLFile & " as " & FSO.GetFileName(sLFile) & " "
      ftpo.Execute , "Put " & sLFile & " " & FSO.GetFileName(sLFile)
      'ftpo.Execute , "Get " & sRemoteFile & " C:\" & sLFile
      do
       WScript.Sleep 100 'This can take a while
      loop while ftpo.StillExecuting
     else
      MsgBox Chr(34) & sLFile & Chr(34) & " does not exist!", _
        vbOKOnly
     end if
    next
    ftpo.Execute , "Close"

    End Sub

    quinta-feira, 13 de agosto de 2009 11:13

Todas as Respostas

  • Bom dia!!

    Pequisando cheguei ao seguinte codigo:

    Set FSO = CreateObject("Scripting.FileSystemObject")
    'Coloque aqui a pasta que será verificada
    'strOrigem = "\teste2\"
    strOrigem = "J:\teste\arquivo\"
    'Coloque aqui a pasta para a qual os arquivos serão copiados (Se quiser copiar, se nao quiser apague essa linha)
    strDestino = "c:\destino\"

    'dNow recebe data e hora
    dNow = Now

    'separando dia, mes, ano, hora e minuto
    yy = Right(Year(dNow), 4)
    mm = Right("00" &Month(dNow), 2)
    dd = Right("00" &Day(dNow), 2)
    HH = Right("00" &Hour(dNow),2)

    min = Right("00" &Minute(dNow),2)

    'data = dd & "-" & mm & "-" & yy & "-" & HH & "-" & min
    data = yy & mm & dd

    'wscript.echo data
    strNome = "cancelamento" & data

    'FSO.Copyfile strOrigem & myfiles.name,strDest,True
    'FSO.MoveFile strOrigem, strDestino & strNome

    strComputer = "."
    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
    Set objFSO = CreateObject("Scripting.FileSystemObject")

     

    'Coloque aqui os tipos de arquivos que serão copiados ou deletados, separados por ";"
    arrTipos = "txt"

    ' NOME DO ARQUIVO DE LOG
    strLogFile = "c:\cancelamento.log"

    arrTipos = split(arrTipos,";")
    existe = false
    Set objLogFile = objFSO.OpenTextFile(strLogFile, 8, True, 0)
    objLogFile.WriteLine  VBCRLF
    objLogFile.WriteLine "==================================================="
    objLogFile.WriteLine "ARQUIVOS .TXT ACHADOS EM: " & now
    objLogFile.WriteLine "==================================================="

    If (objFSO.FolderExists(strOrigem) = True) Then
       Set Folder = ObjFSO.GetFolder(strOrigem)
       Set MyFiles = Folder.files  
          For Each tipo in arrTipos
             For Each MyFiles in Folder.Files
                If Right(myfiles.name,3) = tipo Then
                   existe = true
                   'objFSO.Copyfile strPasta & myfiles.name,strDestino,True
                   objLogFile.WriteLine "Arquivo : "  & myfiles.name &  " Data : " & Now
                   'objFSO.Deletefile strPasta & myfiles.name
                  
                End If
             Next
          Next
    End if
    if existe = true then
    Set wshshell = wscript.createobject("wscript.shell")
    wshshell.run "7z a -tzip ..\arquivo\" & strNome &".zip ..\arquivo\*.txt"
    For Each tipo in arrTipos
             For Each MyFiles in Folder.Files
                If Right(myfiles.name,3) = tipo Then
                   existe = true
                   'objFSO.Copyfile strPasta & myfiles.name,strDestino,True
                   'objLogFile.WriteLine "Arquivo : "  & myfiles.name &  " Data : " & Now
                   Wscript.echo myfiles.name
                   objFSO.Deletefile strOrigem & myfiles.name
                End If
             Next
    Next
    else
    objLogFile.WriteLine "Não foi achado nenhum arquivo .txt para a data : " & Now
    end if
    wscript.quit

    Esta funcionando em parte para o que eu quero, faltando apenas o ftp.
    Acho que teria um geito de fazer mas simples também.

    Alguem pode me ajudar

    quarta-feira, 5 de agosto de 2009 16:08
  • Colocar a sub no final do seu script e chamar a mesma em qualquer parte do seu script, conforme necessario.
    Ex.: cFTP("\arquivo\" & strNome &".zip")

    Sub cFTP(sLFile)

    const rdir = "mydir"

    Dim fso, ftpo
    set fso = WScript.CreateObject("Scripting.FileSystemObject")
    set ftpo = WScript.CreateObject("InetCtls.Inet.1") 'Msinet.ocx
    ftpo.URL = "ftp://ftp.myftpsite.com"
    ftpo.UserName = "anonymous"
    ftpo.Password = "myname@mymailsite.com"
    ftpo.Execute , "CD " & rdir
    do
     WScript.Sleep 100 'This can take a while loop while ftpo.StillExecuting

     if (fso.FileExists(sLFile)) then
      WScript.Echo "Uploading " & sLFile & " as " & FSO.GetFileName(sLFile) & " "
      ftpo.Execute , "Put " & sLFile & " " & FSO.GetFileName(sLFile)
      'ftpo.Execute , "Get " & sRemoteFile & " C:\" & sLFile
      do
       WScript.Sleep 100 'This can take a while
      loop while ftpo.StillExecuting
     else
      MsgBox Chr(34) & sLFile & Chr(34) & " does not exist!", _
        vbOKOnly
     end if
    next
    ftpo.Execute , "Close"

    End Sub

    quinta-feira, 13 de agosto de 2009 11:13