【发布时间】:2015-03-17 15:54:30
【问题描述】:
感谢您的关注。我想遍历文件夹中的每个项目并将合格的文件名和长度(大小)添加到数组中,以便我可以发送电子邮件。例如,如果有没有 .txt 扩展名的文件,我不想包含它们。发生的情况是电子邮件被发送出去,但在几个表格中列出了相同的文件。我知道问题是否在于我如何将当前文件存储到数组中,但不确定如何修复它。我只想将 foreach 中的当前文件添加一次。
这是我的剥离代码:
$myFolder = "C:\Users\myName\Documents\Temporary"
$ReceivedCount = 0
$a = "<style>BODY{font-family: Verdana; font-size: 9pt;}"
$a = $a + "BODY{background-color:white;}"
$a = $a + "TABLE{border-width: 1px;border-style: solid;border-color: black;border-collapse: collapse; }"
$a = $a + "TH{border-width: 2px;padding: 7px;border-style: solid;border-color: black;background-color:lightblue;padding-right: 2px;}"
$a = $a + "TD{border-width: 2px;padding: 5px;border-style: solid;border-color: black;background-color:white; padding-right: 2px;}"
$a = $a + "</style>"
foreach ($file in $myFolder)
{
$FileName = $file.name
Echo "Curent file: $FileName"
if($FileName -like "*.txt")
{
$ReceivedCount += 1
# This is the section I'm doing wrong:
$FilesReceived += @(Select-Object name , length | ConvertTo-HTML -head $a)
}
}
Echo "Found $ReceivedCount files."
if ($FilesReceivedCount -gt 0)
{
#send email...
}
【问题讨论】:
-
你在哪里清除
FilesReceived?Select-Object在那里操作什么对象? -
我不清除 $FilesRecieved 因为一旦这个脚本运行它就完成了。 Select-Object 应该只在 foreach 循环中获取当前文件的名称和长度。
-
那么你在这里输出什么多个表,这里没有任何循环(除了文件之外)?示例输入和输出可能会有所帮助。
-
所以比如我有四个文件,taco.txt、nachos.txt、salsa.txt和order.log。当我发送邮件消息时,我想通过电子邮件发送一个表格,其中列出了每个 *.txt 文件的名称和大小。代码现在所做的是,当我发送电子邮件时,它将三个文件中的每一个都列在单独的表中。
-
您正在为每个文件运行一次
convertto-html。如果你想要一个表,我相信你需要在整个集合上运行一次。
标签: arrays powershell foreach