Script de lote do Windows: selecionando um item de uma lista de resultados de pesquisa

1

Objetivo: gostaria de pesquisar um tipo específico de arquivos em uma única pasta. Filtrado por um padrão de nome de arquivo específico (por exemplo, "arquivo") e também classificado por nome de arquivo, o resultado seria assim:

file101.txt
file212.txt
file432.txt

Agora, gostaria de selecionar apenas o último item (aqui: file432.txt ) e realizar outras operações (por exemplo, copiar e renomear) nesse arquivo.

Como eu faria isso?

O que eu tenho até agora é o seguinte:

@echo off
setlocal
set list=
for /r . %%g in (file*.txt) do echo %%g

.. que me dá a lista apresentada no topo da minha pergunta.

Tanto quanto eu entendo, não há lista real - é apenas uma string com caracteres de retorno / nova linha. Consequentemente, não posso realmente selecionar um item de resultado de pesquisa específico. Eu teria usado outro loop for , mas não sei exatamente para qual padrão eu filtraria, exceto para EOF. A única idéia que tenho é remover todos os caracteres da nova linha e salvar o resultado em uma variável. Agora, toda nova linha encontrada sobrescreveria a anterior.

Como eu faria isso?

set lastitem=for %%g in (%list%) do REMOVE_NEWLINE and echo %%g
    
por Jim McAdams 22.08.2016 / 16:53

1 resposta

1

Gostaria de selecionar apenas o último item

(here: file432.txt) and perform further operations (e.g. copy and rename) on that file.

Use o seguinte arquivo em lotes.

test.cmd:

@echo off 
setlocal
for /r . %%g in (file*.txt) do (
  set _lastitem=%%g
  )
echo do something to the last file in the list, which is %_lastitem%
endlocal

exemplo de saída:

F:\test>dir file*.txt
 Volume in drive F is Expansion
 Volume Serial Number is 3656-BB63

 Directory of F:\test

22/08/2016  18:17                 0 file101.txt
22/08/2016  18:17                 0 file212.txt
22/08/2016  18:17                 0 file432.txt
               3 File(s)              0 bytes
               0 Dir(s)  1,765,302,566,912 bytes free

F:\test>test
do something to the last file in the list, which is F:\test\file432.txt

F:\test>
    
por 22.08.2016 / 19:21