Searching and Separating Files Using .bat

1
  

I have a daily / monthly process where, I have a .txt that has a list of about 10,000 file IDs (one ID per line)

(example_contact_file.txt)

  

{   12345
  23456
  34567
  45678
  56789
  }

Each (eg 12345) file ID of the .txt corresponds to an .xml file ( 12345 _0.xml) that is in a server folder < b> (server02) together with another 200,000 .xml files that do not interest me.

I want to create a .bat that by the IDs I have in .txt, find and play only the .xml files with .txt IDs.

Roughly speaking, I think logic would look like this.


for (1 = 0; 1> Quantity_ids_Txt; i ++)
{
    Variable XXX = GET FIRST ID (THAT CORRESPONDS TO i LINE);

Se (PROCURAR .XML QUE O NOME POSSUA *XXX*.xml e encontrar){

    Mover Arquivo_<b>X</b> para C:\USER\PASTA_ARQUIVOS_DESEJADOS

}

Se não{

    registrar no arquivo LOG.txt a string "ARQUIVO XXX não encontrado"

}  




About us Could someone please help me? I need to pass this logic on to a .bat log. I would handle doing this in a C #, but in .bat I do not give up. Thank you in advance!

    
asked by anonymous 10.05.2017 / 20:28

1 answer

1

In this command you can modify the variables to fit your environment.

As I do not understand much of for in CMD, you do not have yet to remove the error log of {.xml and }.xml that will not be found.

No for each line of the file will be stored in the %%A variable, so if the file has the ID 12345 and the file name to be copied is File_12345_0. xml , in the code below within for where you have %pastaArquivos%%%A%tipo% you should change to %pastaArquivos%Arquivo_%%A_0%tipo% .

@echo off

rem Comandos para salvar a data e a hora no log caso tenha interesse.
for /F "tokens=*" %%F in ('date /t') do set dateLog=%%F
set timeLog=%time%

rem Pasta para onde os arquivos devem ser copiados.
set minhaPasta=C:\MinhaPasta\

rem Arquivo txt que o processo vai ler com o nome dos arquivos.
set meuArquivo=C:\arquivos.txt

rem Caminho com o nome do log que deseja salvar.
set meuLog=C:\meuLog.log

rem Pasta onde estão os arquivos que devem ser copiados, tem que ter a barra no final "\".
set pastaArquivos=C:\MeusArquivos\

rem Extensão dos arquivos.
set tipo=.xml

rem Se a pasta que quer copiar os arquivos não existe esse comando vai criar ela
if not exist %minhaPasta% md %minhaPasta%

rem Caso o arquivo que tem os nomes dos arquivos não exista vai gravar o log informando.
if not exist %meuArquivo% echo Arquivo %meuArquivo% nao encontrado em %dateLog%%timeLog% >> %meuLog%

rem Inicio da verificação
for /F "tokens=*" %%A in (%meuArquivo%) do (
    if not exist %pastaArquivos%%%A%tipo% (
        echo Arquivo %pastaArquivos%%%A%tipo% nao encontrado em %dateLog%%timeLog% >> %meuLog%
    ) else (
        copy %pastaArquivos%%%A%tipo% %minhaPasta%
    )

)
rem Somente para ver o resultado da cópia dos arquivos, se não quiser remova.
pause
    
10.05.2017 / 22:39