Resposta curta
Se o diretório atual contiver imagens cujos nomes de arquivo seguem o mesmo padrão DSC_XXXX.jpg
(onde XXXX
é um número) e um arquivo denominado Technical.txt
contendo alguns desses números, o comando a seguir copiaria para o Technical
pasta (assumindo que exista no diretório atual) todos os arquivos para os quais um número é fornecido no arquivo Technical.txt
:
Get-Content Technical.txt | ForEach-Object { Copy-Item "DSC_$_.jpg" Technical }
Se os arquivos Technical.txt
e picture e o diretório Technical
não estiverem no diretório atual, caminhos completos ou relativos devem ser fornecidos, por exemplo:
Get-Content c:\path1\to\Technical.txt | ForEach-Object { Copy-Item "c:\path2\to\pictures\DSC_$_.jpg" c:\path3\to\Technical }
Explicação
- A expressão
"DSC_$_.jpg"
no comando é usada para gerar o nome do arquivo de imagem a partir do número lido do arquivoTechnical.txt
, que é o objeto de pipeline atual (por exemplo,$_
). Ele simplesmente adicionaDSC_
como prefixo e.jpg
como extensão. -
Get-Content lê o conteúdo do arquivo
Technical.txt
. -
ForEach-Object executa os argumentos do bloco de scripts (entre chaves, ou seja,
{}
) para cada objeto no pipeline, neste caso, cada linha de texto retornada porGet-Content
.
Testando esta solução (online ou localmente)
O mais fácil é tentar esta solução online.
Caso contrário, o snippet a seguir pode ser usado para criar no diretório atual uma pasta test
contendo um exemplo de arquivo Technical.txt
e arquivos de imagem falsos seguindo o padrão mencionado nesta resposta junto com um diretório Technical
vazio ( tenha cuidado : você precisa alterar .\test
para outra coisa se já tiver uma pasta test
no diretório de trabalho:
mkdir -ErrorAction SilentlyContinue .\test\Technical
Out-File .\test\DSC_4811.jpg; Out-File .\test\DSC_4812.jpg; Out-File .\test\DSC_4813.jpg;
Out-File .\test\DSC_4814.jpg; Out-File .\test\DSC_4819.jpg; Out-File .\test\DSC_4820.jpg;
"4811'n4819'n4820" > .\test\Technical.txt
(Na terceira linha, 'n
representa um caractere de fim de linha (a marca de retorno ( '
) é um escape character no PowerShell).
Ele gera os seguintes arquivos:
.\test\DSC_4811.jpg .\test\DSC_4812.jpg .\test\DSC_4813.jpg
.\test\DSC_4814.jpg .\test\DSC_4819.jpg .\test\DSC_4820.jpg
.\test\Technical.txt
Após o comando fornecido como resposta ser executado ( Get-Content .\test\Technical.txt | ForEach-Object { Copy-Item ".\test\DSC_$_.jpg" .\test\Technical }
), os arquivos são:
.\test\DSC_4811.jpg .\test\DSC_4812.jpg .\test\DSC_4813.jpg
.\test\DSC_4814.jpg .\test\DSC_4819.jpg .\test\DSC_4820.jpg
.\test\Technical.txt
.\test\Technical\DSC_4811.jpg .\test\Technical\DSC_4819.jpg .\test\Technical\DSC_4820.jpg
Para limpar:
ri -Recurse .\test