Increase Performance Bat

1

I currently have a .bat that runs copying network files from one server to another. This made a lot of work easier for me that was done manually, but I noticed that by removing some .bat flourishes, it improved its execution performance on file copies.

I'll be posting the .bat code and if possible, could help me perform it, making it shorter, performative, but keeping its main purpose.

The goal is to get ids from a list.txt and copy the files with their IDs to another folder on the network. NOTE: I was dumping into a log if I did not find the file, but I do not need it so I removed it.

@echo off

rem Pasta para colar os arquivos copiados.  
set minhaPasta=I:\ARQUIVOS_ENCONTRADOS

rem Arquivo txt que o processo vai ler com o nome dos arquivos "LISTA DOS IDs".  
set meuArquivo=I:PASTA\lista.txt  

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

rem Extensão dos arquivos a serem copiados.  
set tipo=.xml  

rem Comando para criar as pastas caso elas não existam no meu computador  
rem if not exist %minhaPasta% md %minhaPasta%  

rem Caso o arquivo que tem os nomes dos arquivos não exista vai gravar o log informando.  

rem Inicio da verificação  
for /F "tokens=*" %%A in (%meuArquivo%) do (      
        copy %pastaArquivos%*%%A*%tipo% %minhaPasta%   
    )
pause

Is it possible to improve the performance of this .bat? Would they have any tips?  Not even include or reduce variables, remove comments, execute location and use variables, etc ...

    
asked by anonymous 12.05.2017 / 21:30

2 answers

1

I do not think it will improve performance in BATCH itself, it looks simple enough, but avoid using special characters even in comments, like letters with accents and cedilla, also avoid leaving too many spaces before line breaks, you may not to be nothing, but it's also something to be written on the command prompt screen.

FOR has twice the "*", unless it is necessary for the default of the name used in the files.

I did the test simulating the code, but instead of copying it to another machine, I copied it to a PEN-DRIVE.

To see the script run more clearly I put these commands in the beginning:

@echo off
cls

You can do a check or stop the script if any files are not found with errorlevel within FOR :

IF %ERRORLEVEL% NEQ 0 echo ERRO AO TRANSFERIR ARQUIVO DE ID %%A

What you can improve is the communication between the machines, putting network cable avoiding the use of wireless connection, also fixing the IPs with the same class to avoid dropping the network. >     

03.03.2018 / 04:59
0

Shorter does not always mean faster !!!

   cls & @echo off & setlocal enableextensions enabledelayedexpansion

    set _log_Rotinas_="%temp%\Log_Rotina_MeuArquivo_MinhaPasta_.log"
    set pastaArquivos=J:\
    set    minhaPasta=D:\ARQUIVOS_ENCONTRADOS\
    set    meuArquivo=I:\PASTA\lista.txt
    set          tipo=.xml

    :: verifica a existencias das pastas/arquivos:
    <nul dir !patstaArquivos! 2>nul >nul || echo/N existe:!patstaArquivos! >>!_log_Rotinas_!
    <nul dir !minhaPasta! 2>nul >nul || echo/N existe:!_minhaPasta! >>!_log_Rotinas_!
    <nul dir !meuArquivo! echo/N exist: !meuArquivo! >>!_log_Rotinas_!
    <nul dir , | findstr /i /l /c:"!minhaPasta!" 2>nul >nul || md !minhaPasta!

    :: supondo que seu arquivo "%meuArquivo%" contenha apenas a referencia do ID 
    :: não o nome e/ou a extensão do arquivo, só nome.extensão
    :: num for, adicionando um commando para tratar o arquivo "%meuArquivo%" /f + tokens=* + delims(type)
    :: aproveitando para pular linhas em branco (**caso existente)**

    cd /d "!minhaPasta!" & for /F "tokens=* delims= " %%A in ('type !meuArquivo!') do (

        (

         <nul echo/%%A|findstr /i /l /c:"!tipo!"

        ) 2>nul >nul && (

         :: O ponto abaixo é a pasta atual já apontada no commando anterior: cd /d "!minhaPasta!"
         copy "!pastaArquivos!*%%A*.!tipo!" .

        ) 2>nul >nul || (

        :: para depurar a execução somente em caso de erro, que tal substitir o pause pelo timeout:

         echo/ depurando valores e a execução:
         echo/ pastaArquivos =   !pastaArquivos! 
         echo/ minhaPasta    =   !minhaPasta! 
         echo/ %%%%A           =   %%A

         timeout /t 10 2>nul >nul

        )

        )
    
13.12.2018 / 19:21