Tenho arquivos com a seguinte estrutura:
c:\root\dir1\001 (BRP-01 Some) Text.tif
c:\root\dir2\002 (BRP-01 Some Different) Text.tif
c:\root\dir3\001 (BRP-01 Some) Text.tif
...
Por fim, quero extrair arquivos com base em um intervalo contíguo dos três primeiros dígitos de um nome de arquivo. Minha abordagem inicial é tentar Array of Arrays
armazenar informações de diretório e informações de arquivos ... que serão posteriormente executadas para extrair e avaliar os três primeiros números e manipulá-los posteriormente. No entanto, minha experiência com arrays em PS é limitada e estou tendo problemas na hora de armazenar dados, acessar esses dados ou ambos.
Se você pudesse ajudar a corrigir minha sintaxe, seria apreciado. Além disso, se houver uma abordagem melhor que eu possa considerar, estou aberto a abordagens alternativas.
PS C:\root\> Get-ChildItem *.tif -recurse | foreach-object {$a=$_.DirectoryName; $b=$_.Name; $c+=@(@($a,$b)); foreach ($i in $c) {echo $i[0]}
# I realize something "breaks" after $c+= ... but I am unsure what. The script runs but I cannot access the respective fields as expected or the data isn't being populated as expected.
Eu esperaria que a matriz retornasse algo como o seguinte assim que eu tiver a sintaxe correta:
$i[0]:
c:\root\dir1\
c:\root\dir2\
c:\root\dir3\
$i[1]:
001 (BRP-01 Some) Text.tif
002 (BRP-01 Some Different) Text.tif
001 (BRP-01 Some) Text.tif
$i[0][1]: c:\root\dir1\
Estou bastante confiante de que posso manipular os dados, uma vez que posso entender firmemente como a Array of Arrays
construção e os dados são chamados a partir dele.
Obrigado!
Acho que você está complicando muito isso. você não precisa de mais "formatação de dados" depois de executar seu
Get-ChildItem
comando. Você simplesmente precisa deGroup-Object
sua saída, dependendo dos primeiros 3 caracteres dos nomes de arquivos como este:Isso retornará seus objetos, agrupados em seus respectivos prefixos, sem que nenhuma informação seja perdida:
por exemplo, se você expandir um grupo, o conteúdo ficará assim:
Você pode acessá-lo de diferentes maneiras, por exemplo, assim: