Como movo, renomeio arquivos com mais eficiência e registro essa ação?
Eu tenho a seguinte lista CSV (na realidade, milhares de linhas):
needle,code 123456,AB 121212,BB 33333333,CVV
E eu tenho um diretório (C:\old_files
) contendo arquivos PDF (novamente, milhares na realidade):
dsadsadsa.343222.dsads23213jkjl.saddsa.pdf dsadsadsa.123456.dsads23213jkjl.saddsa.pdf dsadsadsa.111111.dsads23213jkjl.saddsa.pdf dsadsadsa.33333333.dsads23213jkjl.saddsa.pdf dsadsadsa.33333333.fsdgdsfdsfdsf.dsad.pdf
Para cada agulha no CSV:
Eu tenho que ver se existe um PDF contendo essa agulha (pode haver 0 ou mais correspondências)Se houver uma correspondência, eu tenho quefaça uma cópia do arquivo em uma pasta separada (D:\new_files
)renomeie o arquivo copiado, acrescentando o respectivo código ao nomeescreva uma entrada no log.Por exemplo, eu tenho uma correspondência para123456
e 2 para33333333
, então eu tenho que mover uma cópia desses arquivos paraD:\new_files
e renomeie-os para:
AB.dsadsadsa.123456.dsads23213jkjl.saddsa.pdf CVV.dsadsadsa.33333333.dsads23213jkjl.saddsa.pdf CVV.dsadsadsa.33333333.fsdgdsfdsfdsf.dsad.pdf
O arquivo de log ficaria assim (formatoneedle,code,oldfilepath,newfilepath
):
123456,AB,C:\old_files\dsadsadsa.123456.dsads23213jkjl.saddsa.pdf,D:\new_files\AB.dsadsadsa.123456.dsads23213jkjl.saddsa.pdf 33333333,CVV,C:\old_files\dsadsadsa.33333333.dsads23213jkjl.saddsa.pdf,D:\new_files\CVV.dsadsadsa.33333333.dsads23213jkjl.saddsa.pdf 33333333,CVV,C:\old_files\dsadsadsa.33333333.fsdgdsfdsfdsf.dsad.pdf,D:\new_files\CVV.dsadsadsa.33333333.fsdgdsfdsfdsf.dsad.pdf
É importante que eu faça um loop sobre os arquivos no diretório apenas uma vez, porque iteramos em todos os arquivos em um diretório.ForEach
loop para cadaneedle
leva muito tempo. Então, graças a este fórum, estou construindo uma hashtable primeiro:
$pairs = @{}
Import-CSV .\data.csv | ForEach-Object { $pairs[$_.needle] = $_.code+"." }
Get-ChildItem "C:\old_files" | Rename-Item -NewName { "D:\new_files\" + $pairs[$_.Name.Split('.')[1]] + $_.Name }
Meu primeiro problema aqui: não consigo mover o arquivo para a nova pasta.
Q1 Como copiar corretamente um arquivo deC:\old_files
para dentroD:\new_files
e renomeá-lo?
Meu segundo problema: não entendo como posso adicionar código ao código acima.
Q2 Como posso criar o arquivo de log para cada correspondência (e, portanto, arquivo copiado e renomeado)?