Use lista de nomes de arquivos parciais em txt para copiar arquivos de uma pasta para outra

0

Eu tenho um grande número de imagens armazenadas em uma única pasta e classificadas através delas para escolher quais copiar para determinadas pastas como "cenário" ou "técnico" e criei uma lista de nomes de arquivos parciais para cada pasta em um arquivo de texto . por exemplo. Scenery.txt

4811
4819
4820

Estes são os números de arquivos exclusivos que fazem parte dos nomes de arquivos completos, por exemplo:

C:\Users\drewb\Pictures18_08_Inuvik\All\DSC_4811.jpg

Eu tenho um script no powershell que funcionou para mim quando eu tinha uma lista dos nomes de arquivos completos listados em um arquivo .txt, mas para economizar tempo devido a um maior número de fotos eu escrevi apenas o número da imagem. Espero que haja uma maneira de criar uma matriz dessa lista e alimentá-la como uma variável no nome completo do arquivo em um loop, mas qualquer sugestão é bem-vinda.

O código que funcionou para mim com os nomes completos no .txt foi

Get-Content C:\Users\drewb\Pictures18_08_Inuvik\Technical.txt | ForEach-Object {copy-item $_ C:\Users\drewb\Pictures18_08_Inuvik\Technical}

RESOLVIDO: Eu resolvi isso concatenando o caminho do arquivo para os nomes e a extensão do arquivo no excel, em seguida, usado usou o script PS que eu usei anteriormente. No entanto, sinto que deve haver uma maneira mais direta de que isso possa ser roteirizado.

    
por Drew Branson 04.09.2018 / 04:21

1 resposta

1

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 arquivo Technical.txt , que é o objeto de pipeline atual (por exemplo, $_ ). Ele simplesmente adiciona DSC_ 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 por Get-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
    
por 18.09.2018 / 03:57