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
;%~nxf
extrai 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
. -
findstr
procura por uma string (ou padrão) em um arquivo (ou outro conjunto de dados); é essencialmente o equivalente dogrep
do 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 -x
correspondam ale2.do
.
-
-
file2.doc
- equivalente a> nul
; isso impede que a saída de> /dev/null
seja 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
findstr
entre aspas (%f
) e talvez mude o comando"%f"
. - Antes de executar este comando de verdade,
talvez você queira alterar
findstr
paracopy
, 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 copy
para%
. - 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)