none
Localizar e documentar RRS feed

  • Pergunta

  •  

    Ba galera

    Boa tarde.

    Andei buscando aqui no fórum e achei vários códigos mais nenhum com a junção que eu gostaria, ate achei um que faz mais ele requer a leitura do driver C como um todo, mais quando passo o caminho dos arquivos de programas\sistema\dados, ele da erro null e não executada.

    Eu tenho uma pasta de dados criada por uma aplicação nas estações, de extensão lpd, eu estou precisando de um script que leia esta pasta e procure peles *.lpd, e crie um arquivo de log em txt, colocando o nome destes arquivos lpd em seqüência, desta forma:

    contabil.lpd; corrente.lpd; parametros.lpd

    Tem mais uns detalhes existem dois caminhos a ser utilizado como parâmetro e duas extensões, que são:

    arquivos de programas\sistema\dados

    arquivos de programas\sistemav2\dados

    Extensões: lpd e pld, e as extensões podem estar presente nos dois caminhos, ou em um só.

    Não é necessário escrever no log o caminho, só necessito documentar os nomes dos arquivos conforme as extensões.

    Valeu tche, obrigado galera.

    domingo, 12 de fevereiro de 2012 17:12

Respostas

  • Duas alternativas:

    1) Coloque o nome de todos os caminho possiveis na variavel arrPastas

    arrPastas = array("\arquivos de programas\sistema\dados\","\arquivos de programas\sistemav2\dados\",("\Program Files\sistema\dados\","\Program Files\sistemav2\dados\")

    2) Ou substitua a linha

    arrPastas = array("\arquivos de programas\sistema\dados\","\arquivos de programas\sistemav2\dados\")

    por estas

    Const PROGRAM_FILES = &H26&
    Set objShell = CreateObject("Shell.Application")
    Set objFolder = objShell.Namespace(PROGRAM_FILES)
    strProgramFile = objFolder.Self.path
    
    'Tira o C: (ou d:\ e:\)
    strProgramFile = Mid(strProgramFile,3)
    'Cria Array de pastas
    arrPastas = array(strProgramFile & "\sistema\dados\",strProgramFile & "\sistemav2\dados\")


    Fábio de Paula Junior


    • Editado Fábio JrModerator segunda-feira, 13 de fevereiro de 2012 11:49 Melhora na parte que tira o drive
    • Marcado como Resposta Marcelo TI segunda-feira, 13 de fevereiro de 2012 12:10
    segunda-feira, 13 de fevereiro de 2012 11:47
    Moderador

Todas as Respostas

  • Marcelo,

    Teste este script.

    Observe que nos parametros do script você não deve utilizar o caminho da pasta como "C:\Arq...", deve-se utilizar "\Arquivos de P", sem a identificação do Drive, o objeto CIM_DataFile que utilizei é meio chato, é comum o erro Null por motivo da query estar errada. Veja que deixei o script "mastigado" caso você queira procurar em outras pastas e por outros arquivos, basta acrescentar o que vc quer em uma das duas váriaveis no inicio do script.

    No final ele gera strArquivos que contém a lista de arquivos procurados, vc só precisa acrescentar a parte que escreve em arquivo.

    strComputer = "."
    
    arrPastas = array("\arquivos de programas\sistema\dados\","\arquivos de programas\sistemav2\dados\")
    arrExtensoes = array("lpd","pld")
    
    
    'Constrói QUERY
    for each Pasta in arrPastas
    	if strQueryP>"" then
    		strQueryP = strQueryP & " OR Path = '" & replace(Pasta,"\","\\") & "'"
    	else
    		strQueryP = "Path = '" & replace(Pasta,"\","\\") & "'"
    	end if
    next
    if strQueryP>"" then strQueryP="(" & strQueryP & ")"
    
    for each Extensao in arrExtensoes
    	if strQueryE>"" then
    		strQueryE = strQueryE & " OR Extension = '" & Extensao & "'"
    	else
    		strQueryE = "Extension = '" & Extensao & "'"
    	end if
    next
    if strQueryE>"" then strQueryE="(" & strQueryE & ")"
    
    if strQueryP>"" then strQuery=strQueryP
    if strQuery>"" and strQueryE>"" then strQuery=strQuery & " AND " & strQueryE
    ' Fim da Construção da Query
    
    
    ' Incio da Pesquisa
    Set objWMIService = GetObject("winmgmts:" _
        & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
    	
    Set colFiles = objWMIService. _
        ExecQuery("Select * from CIM_DataFile where " & strQuery )
    
    For Each objFile in colFiles
    	strArquivos = strArquivos & objFile.FileName & "." & objFile.Extension & ";"
    Next
    
    wscript.echo strArquivos
    	

    Refs.:
    Enumerating Files and File Properties

    http://technet.microsoft.com/en-us/library/ee176591.aspx

    CIM_DataFile class

    http://msdn.microsoft.com/en-us/library/windows/desktop/aa387236(v=vs.85).aspx


    Fábio de Paula Junior


    segunda-feira, 13 de fevereiro de 2012 11:02
    Moderador
  • Fabio

    Obrigado, mais não é possivel usar o:

    Const PROGRAM_FILES = &H26&

    Set objShell = CreateObject("Shell.Application")

    Set objFolder = objShell.Namespace(PROGRAM_FILES)
    strProgramFile = objFolder.Self.path

    Para definir o nome do caminho do arquivos de programa pois tenho maquinas com windows ingles e portugues.

    segunda-feira, 13 de fevereiro de 2012 11:36
  • Duas alternativas:

    1) Coloque o nome de todos os caminho possiveis na variavel arrPastas

    arrPastas = array("\arquivos de programas\sistema\dados\","\arquivos de programas\sistemav2\dados\",("\Program Files\sistema\dados\","\Program Files\sistemav2\dados\")

    2) Ou substitua a linha

    arrPastas = array("\arquivos de programas\sistema\dados\","\arquivos de programas\sistemav2\dados\")

    por estas

    Const PROGRAM_FILES = &H26&
    Set objShell = CreateObject("Shell.Application")
    Set objFolder = objShell.Namespace(PROGRAM_FILES)
    strProgramFile = objFolder.Self.path
    
    'Tira o C: (ou d:\ e:\)
    strProgramFile = Mid(strProgramFile,3)
    'Cria Array de pastas
    arrPastas = array(strProgramFile & "\sistema\dados\",strProgramFile & "\sistemav2\dados\")


    Fábio de Paula Junior


    • Editado Fábio JrModerator segunda-feira, 13 de fevereiro de 2012 11:49 Melhora na parte que tira o drive
    • Marcado como Resposta Marcelo TI segunda-feira, 13 de fevereiro de 2012 12:10
    segunda-feira, 13 de fevereiro de 2012 11:47
    Moderador
  • Obrigado Fabião.
    segunda-feira, 13 de fevereiro de 2012 12:11
  • Fabio

    Obrigado pela ajuda amigo mais estou tendo algum problema, quando executo o codigo pela ferramenta de edição que uso o vbsedit ele executa sem problemas, ate grava o txt, mais quando do dois cliques o vbs salvo ele retorna o echo em branco e o log tb, ele ficou assim.

    obrigado.

    strComputer = "."

    Const PROGRAM_FILES = &H26&
    Set objShell = CreateObject("Shell.Application")
    Set objFolder = objShell.Namespace(PROGRAM_FILES)
    strProgramFile = objFolder.Self.path

    'Tira o C: (ou d:\ e:\)
    strProgramFile = Mid(strProgramFile,3)
    arrPastas = array(strProgramFile & "\sistema\dados\",strProgramFile & "\sistemav2\dados\")

    arrExtensoes =array("lpd","pld")

    'Constrói QUERY
    for each Pasta in arrPastas
     if strQueryP>"" then
      strQueryP = strQueryP & " OR Path = '" & replace(Pasta,"\","\\") & "'"
     else
      strQueryP = "Path = '" & replace(Pasta,"\","\\") & "'"
     end if
    next
    if strQueryP>"" then strQueryP="(" & strQueryP & ")"

    for each Extensao in arrExtensoes
     if strQueryE>"" then
      strQueryE = strQueryE & " OR Extension = '" & Extensao & "'"
     else
      strQueryE = "Extension = '" & Extensao & "'"
     end if
    next
    if strQueryE>"" then strQueryE="(" & strQueryE & ")"

    if strQueryP>"" then strQuery=strQueryP
    if strQuery>"" and strQueryE>"" then strQuery=strQuery & " AND " & strQueryE
    ' Fim da Construção da Query


    ' Incio da Pesquisa
    Set objWMIService = GetObject("winmgmts:" _
        & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
     
    Set colFiles = objWMIService. _
        ExecQuery("Select * from CIM_DataFile where " & strQuery )

    For Each objFile in colFiles
     strArquivos = strArquivos & objFile.FileName & "." & objFile.Extension & ";"
    Next

    wscript.echo strArquivos

    strArquivo = "c:\log.log"

    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Const ForAppending = 8
    If objFSO.FileExists(strArquivo) Then
        Set objFile = objFSO.OpenTextFile(strArquivo, ForAppending, True)
    Else
        Set objFile = objFSO.CreateTextFile(strArquivo)
     objFile.Writeline strArquivos
    End If

    objFile.close


    • Editado Marcelo TI segunda-feira, 13 de fevereiro de 2012 12:30
    segunda-feira, 13 de fevereiro de 2012 12:28
  • No meu não ocorreu este tipo de problema.

    Quanto a parte de gravar em arquivo que você acrescentou, ele tem um erro.

    Veja que você colocou o .WriteLine dentro do bloco do IF que só é executado quando o arquivo não existe. O correto seria ficar do lado de fora do IF.

    If objFSO.FileExists(strArquivo) Then
    	Set objFile = objFSO.OpenTextFile(strArquivo, ForAppending, True)
    Else
    	Set objFile = objFSO.CreateTextFile(strArquivo)
    End If
    objFile.Writeline strArquivos 


    Fábio de Paula Junior

    segunda-feira, 13 de fevereiro de 2012 13:06
    Moderador
  • Fabio

    Obrigado mais uma vez, melhor ainda mais o codigo com a parte do log, o erro continua, vem em branco pode algo de incompatibilidade com 64bits nao sei, vou usar a primeira alternativa que vc me passou, pois ela funciona quando dou dois cliques no arquivo..

    muito obrigado mais uma vez tche.

    segunda-feira, 13 de fevereiro de 2012 13:30