我有具有以下结构的文件:
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
...
最终,我想根据文件名前三位的连续范围提取文件。我最初的方法是尝试Array of Arrays
存储目录信息和文件信息......然后将根据这些信息提取和评估前三个数字并进一步操作。但是,我在 PS 中使用数组的经验有限,并且在存储数据、访问该数据或两者兼而有之时遇到了问题。
如果您能帮助纠正我的语法,将不胜感激。此外,如果有更好的方法我可以考虑,我愿意接受其他方法。
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.
一旦我有正确的语法,我希望数组返回如下内容:
$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\
我相当有信心,一旦我能够牢牢掌握如何Array of Arrays
构建和从中调用数据,我就可以操纵数据。
谢谢!
我认为你过于复杂了很多。
Get-ChildItem
运行命令后,您不需要任何进一步的“数据格式化” 。您只需要Group-Object
根据文件名的前 3 个字符来输出,如下所示:这将返回您的对象,分组到它们各自的前缀中,而不会丢失任何信息:
例如,如果您展开一个组,则内容如下所示:
然后,您可以通过不同的方式访问它,例如: