Não apenas com o XCOPY. Mas uma instrução FOR simples pode ajudar:
for %A in (A B C D E) do xcopy "fromPath\%A*.txt" "toPath"
Em vez de executar xcopy 6 vezes, existe uma maneira de definir uma matriz de arquivos para copiar?
xcopy \\from_location\(A,B,C,D,E)*.txt \\to_location\
Não apenas com o XCOPY. Mas uma instrução FOR simples pode ajudar:
for %A in (A B C D E) do xcopy "fromPath\%A*.txt" "toPath"
Não tenho certeza de nenhuma maneira nativa de fazer isso, mas você pode ver this post para informações sobre uma GUI e ferramenta de linha de comando que tem sobre todos os meios concebíveis para renomear arquivos com padrões.
Se você usar a versão de linha de comando dessa ferramenta e adicioná-la ao seu PATH
, poderá usá-la em um arquivo de lote.
O link do MaQleod fornece uma resposta do Powershell, mas se você estiver interessado em uma resposta de script em lote, veja uma maneira de fazer isso:
@echo off
set __fileset.1=a*.txt
set __fileset.2=b*.txt
set __fileset.3=c*.txt
set __fileset.4=d*.txt
set __fileset.5=e*.txt
for /f "tokens=2* delims=.=" %%g in ('SET __fileset.') do call :CopySet "%%h"
goto :exit
:CopySet
echo xcopy "%~dpxn1" "\to_location\." /v
goto :eof
:exit
Usando as variáveis de ambiente __fileset.
, você está criando um pseudo array em um arquivo em lotes. Em seguida, você usa o for
loop para percorrer todos os valores disponíveis e chama o sub CopySet
para executar o comando de cópia real. Claro, o script pode ser aprimorado, mas isso é apenas um exemplo de como fazer isso.
Certifique-se de que a última linha no script em lote esteja vazia, como é usado pelo comando goto :eof
para finalizar o sub e retornar à linha de chamada anterior.