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.jpgcomo 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