我已经做了相当多的搜索,但似乎无法找到答案,但如果已经回答,我道歉,如果可以的话,请将其链接到我。
我要做的是根据当前路径中文件数量最少的路径,在6条不同路径上分发文件。
我想要做的是将这些响应($ Queue1-6只是文件路径)添加到数组中,然后对它们进行排序并从第一个对象获取路径。
$QueueFiles1 = ( Get-ChildItem $Queue1 | Measure-Object ).Count
$QueueFiles2 = ( Get-ChildItem $Queue2 | Measure-Object ).Count
$QueueFiles3 = ( Get-ChildItem $Queue3 | Measure-Object ).Count
$QueueFiles4 = ( Get-ChildItem $Queue4 | Measure-Object ).Count
$QueueFiles5 = ( Get-ChildItem $Queue5 | Measure-Object ).Count
$QueueFiles6 = ( Get-ChildItem $Queue6 | Measure-Object ).Count
$FileNumArray = @($QueueFiles1, $QueueFiles2, $QueueFiles3, $QueueFiles4, $QueueFiles5, $QueueFiles6)
$FileNumArray = $FileNumArray | Sort-Object
问题是(据我所知),在将这些值添加到数组后,对象将丢失,剩下的就是值,所以现在我不知道如何引用回原来的对象获取路径信息。
如果有更简单的方法来比较这些文件计数值并获得最低值的路径信息,那么任何有关如何执行此操作的想法都将受到赞赏,并且不需要使用数组来完成此类操作。
此外,如果存在多个具有最低值的路径,则返回哪个路径无关紧要。
提前感谢您的任何帮助。
答案 0 :(得分:1)
请注意,我已经使用了一些自己的文件夹来取代$queue
(s)。同样取决于这些的位置,您可能能够为每个循环构建一个简单的,即:如果它们都是同一父级的子文件夹。
$Queue1 = "C:\Temp\NewName"
$Queue2 = "C:\temp\TaskManagement"
$Queue3 = "C:\temp\message_log.csv"
# Build a hashtable. Add each queue to the hash table.
$fileCount = @{}
# Set the queue as the name and the count as the value
$fileCount.Add("$Queue1", (Get-ChildItem $Queue1 | Measure-Object ).Count)
$fileCount.Add("$Queue2", (Get-ChildItem $Queue2 | Measure-Object ).Count)
$fileCount.Add("$Queue3", (Get-ChildItem $Queue4 | Measure-Object ).Count)
# Sort the results by the value of the hashtable (Counts from earlier) and select only the one.
$fileCount.GetEnumerator() | Sort-Object value | Select-Object -First 1 -ExpandProperty Name
解释最后一行
为了对哈希表进行排序,需要 .GetEnumerator()
。
Sort-Object默认为Ascending,因此无需提及。
Select-Object -First 1
如果你不关心你得到哪一个,只要它有最少的文件。
-ExpandProperty Name
因为你只需要路径而不是哈希表条目本身。