Se você deseja copiar apenas os arquivos cujos nomes estão listados em filelist.txt ,
e pular arquivos que não são (por exemplo, file3.jpg em seu exemplo), faça
for /r folder %f in (*) do @findstr/i /x "%~nxf" filelist.txt > nul && copy %f secondfolder
-
%fé atribuído ao nome do caminho completo de cada arquivo emfolder;%~nxfextrai o nome e a extensão (isto é, o nome do arquivo base; tudo após o último\). -
@suprime a exibição do seguinte comando. Isso é cosmético e discricionário. Além disso, é desnecessário se você colocar este comando em um arquivo de lote e começar com@echo off. -
findstrprocura por uma string (ou padrão) em um arquivo (ou outro conjunto de dados); é essencialmente o equivalente dogrepdo Windows. Usamos para determinar se cada nome de arquivo está na lista de nomes de arquivos, %código%.-
filelist.txt- faz distinção entre maiúsculas e minúsculas. Você pode deixar isso de lado se tiver certeza de que sua lista possui letras maiúsculas corretas. -
/i- Corresponde a linha inteira (como/x). Isso evita que nomes de arquivos comogrep -xcorrespondam ale2.do.
-
-
file2.doc- equivalente a> nul; isso impede que a saída de> /dev/nullseja exibida. (Claro que isso é só para evitar desordenar a tela e é opcional.) -
findstr- Faz o próximo comando (&&) se o comando anterior (copy) foi bem-sucedido. (findstré bem-sucedido se encontrar uma correspondência; isto é, se o nome do arquivo estiver na lista.) - Se você tem algum nome de arquivo com personagens engraçados,
você pode precisar colocar o último
findstrentre aspas (%f) e talvez mude o comando"%f". - Antes de executar este comando de verdade,
talvez você queira alterar
findstrparacopy, então você pode fazer uma corrida a seco e ver o que o comando fará. - Se você colocar o comando em um arquivo de lote,
altere todas as ocorrências de
echo copypara%. - Se você deseja obter uma listagem (log) de onde os arquivos foram encontrados, faça
for /r folder %f in (*) do @findstr/i /x "%~nxf" filelist.txt > nul && (echo %f & copy %f secondfolder)