none
Script .bat para pegar dados de um arquivo .xml RRS feed

  • Pergunta

  • Ola, pessoal, preciso de uma ajuda.

    Tenho uma pasta que fica todas minhas NFe, e eu renomeio todas com o "codigo da nota_data de compra_e distribuidor.xml" e são muita e ja esta pesando.

    Preciso criar um script para abrir o arquivo ".xml" pegar os dados e depois renomear o arquivo.

    Ex de arquivo XML:

    <?xml version="1.0" encoding="utf-8"?>
    <nfeProc versao="3.10" xmlns="http://www.portalfiscal.inf.br/nfe">
    <NFe xmlns="http://www.portalfiscal.inf.br/nfe">
    <infNFe Id="NFe3516031960........" versao="3.10">
    <ide>
    <cUF>35</cUF>
    <cNF>0123456789</cNF>
    <natOp>VENDA DE MERCADORIA</natOp>
    <indPag>1</indPag>
    <mod>55</mod>
    <serie>1</serie>
    <nNF>12121212</nNF>
    <dhEmi>2016-03-29T00:00:00-03:00</dhEmi>
    <dhSaiEnt>2016-03-29T23:05:00-03:00</dhSaiEnt>
    <tpNF>1</tpNF>
    <idDest>1</idDest>
    <cMunFG>3543402</cMunFG>
    <tpImp>1</tpImp>
    <tpEmis>1</tpEmis>
    <cDV>0</cDV>
    <tpAmb>1</tpAmb>
    <finNFe>1</finNFe>
    <indFinal>0</indFinal>
    <indPres>9</indPres>
    <procEmi>0</procEmi>
    <verProc>3.0.0</verProc>
    </ide>
    <emit>
    <CNPJ>4545456000108</CNPJ>
    <xNome>DISPAN COMERCIAL LTDA</xNome>
    <xFant>DISPAN</xFant>
    [...]

    Os campos que preciso é: "<cNF>", "<dhEmi>" e "<xNome>" ja tentei usar o "find" e o "findstr" mas não deu certo, tem alguma forma mais simples de pegar esses dados e no caso, o conteúdo do meio das tags..?

      Alguémme da uma luz??

    Valeu pessoal!!

    domingo, 24 de abril de 2016 17:47

Todas as Respostas

  • O código nas imagens a seguir:

    • verifica todos os arquivos dentro do diretório C:\NF-E que tenham a extensão XML;
    • coleta as informações nas tags informadas de cada arquivo encontrado;
    • trata algumas particularidades como remover as tags, espaço em branco e dois pontos;
    • cria um nome baseado nos valores obtidos nas tags;
    • verifica se o arquivo que será criado existe no diretório RENAMED;
    • caso sim, emite uma mensagem informando que já existe;
    • caso não, copia o arquivo original para o diretório PROCESSED como backup;
    • e movimenta o arquivo original para RENAMED com o nome gerado a partir dos valores das tags.

    Divirta-se e faça as alterações que precisar.

    domingo, 24 de abril de 2016 19:46
  • Ola, muito obrigado pela ajuda..

    Confesso que não tenho nenhum conhecimento em powershell, irei estudar mais porem, acredito que transcrevi o código corretamente:

    Get-Childltem D:\xml | ? {$_.Attributes -notlike "*Directory*" -AND $_.Extension -eq ".xml"} | % {
        [String]$cNF = Get-Content $_.FullName | Select-String -AllMatches "<cNF>"
        $cNF = $cNF.Replace('<cNF>','');$cNF = $cNF.Replace('</cNF>','')
        [String]$dhEmi = Get-Content $_.FullName | Select-String -AllMatches "<dhEmi>"
        $dhEmi = $dhEmi.Replace('<dhEmi>','');$dhEmi = $dhEmi.Replace('</dhEmi>','');$dhEmi = $dhEmi.Replace([Char]Ox003A,'_')
        [String]$xNome = Get-Content $_.FullName | Select-String -AllMatches "<xNome>"
        $xNome = $xNome.Replace('<xNome>','');$xNome = $xNome.Replace('</xNome>','');$xNome = $xNome.Replace([Char]0x0020,'_')
        $NewFileName = $_.DirectoryName + "\RENAMED\" + $cNF + "_" + $dhEmi + "_" + $xNome + ".xml"
        If (Test-Path $NewFileName) {Write-Host "$NewFileName already exists" -ForegroundColor Yellow} Else {
            Copy-Item $_.FullName "D:\xml\ok"
            Move-Item $_.FullName $NewFileName -Force
        }
    }

    Mas esta apresentando esse erro:

    No D:\muda_xml.ps1:5 caractere:112
    + ...  $dhEmi.Replace('</dhEmi>','');$dhEmi = $dhEmi.Replace([Char]Ox003A,' ...
    +                                                                  ~
    ')' ausente na chamada do método.
    No D:\muda_xml.ps1:5 caractere:112
    + ... hEmi.Replace('</dhEmi>','');$dhEmi = $dhEmi.Replace([Char]Ox003A,'_')
    +                                                               ~~~~~~
    Token 'Ox003A' inesperado na expressão ou instrução.
    No D:\muda_xml.ps1:5 caractere:118
    + ... hEmi.Replace('</dhEmi>','');$dhEmi = $dhEmi.Replace([Char]Ox003A,'_')
    +                                                                     ~
    Argumento ausente na lista de parâmetros.
    No D:\muda_xml.ps1:1 caractere:98
    + ... Attributes -notlike "*Directory*" -AND $_.Extension -eq ".xml"} | % {
    +                                                                         ~
    '}' de fechamento ausente no bloco de instrução ou na definição de tipo.
    No D:\muda_xml.ps1:5 caractere:122
    + ... hEmi.Replace('</dhEmi>','');$dhEmi = $dhEmi.Replace([Char]Ox003A,'_')
    +                                                                         ~
    Token ')' inesperado na expressão ou instrução.
    No D:\muda_xml.ps1:13 caractere:1
    + }
    + ~
    Token '}' inesperado na expressão ou instrução.
        + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
        + FullyQualifiedErrorId : MissingEndParenthesisInMethodCall

    Tentei ver os pontos que ele mostra mas não tive sucesso.., mesmo com o cuidado acho que deve ter passado alguma coisa.

    Pode me ajudar?

    quarta-feira, 27 de abril de 2016 19:43
  • Você cometeu um erro digitando um O no lugar de um 0. É 0x003A, não Ox003A.
    quinta-feira, 28 de abril de 2016 03:15
  • BOM DIA

    ESTAVA PROCURANDO NA INTERNET E ACHEI A SUA IDEIA, QUERIA UMA AJUDA 

    TEMOS UMA PASTA XML QUE TEM OS AQUIVOS PRECISO COPIAR SOMETE COPIAR OS ARQUIVOS NOVOS QUE TEM ESTA TAG <tpNF>1</tpNF> PARA UM OUTRO CAMINHA OU PASTA, MAS TERIA QUE COPIAR para uma pasta o que tem somente a tag acima.

    ou seja o scripts fica rodando se cai uma xml novo analisa e copia mais so vai copia o que é de novo os antigos continua na sua pasta original.


    Isaias

    sexta-feira, 5 de outubro de 2018 14:01