0

在 powershell 中,我正在编写一个使用“if”条件的脚本来检查文件夹中是否有过去 2 小时内收到的文件。代码工作正常,输出被写入屏幕,而不是我希望它写入可以通过电子邮件发送的文件。请求善意帮助。问候阿比吉特

编辑:代码

$f = 'D:\usr\for_check' 
$files = ls $f 
Foreach ($file in $files) 
{ 
    $createtime = $file.CreationTime 
    $nowtime = get-date 
    if (($nowtime - $createtime).totalhours -le 2) 
    {
        "$file"
    } 
}
4

4 回答 4

2

您可以使用重定向运算符>Out-File

例子:

"abc" > c:\out.txt

"abc" | Out-File c:\out.txt
于 2013-03-28T11:13:28.320 回答
1

您将需要使用>>运算符而不是>out-file运算符,因为它们每次使用时都会覆盖文件。而>>操作员将在下一行写入文件。

例子:

$file >> c:\out.txt

于 2013-03-28T11:32:08.380 回答
1

将每一行写入循环内的文件会导致大量磁盘 I/O。您可以将循环包装在脚本块中,然后在一次写入操作中将所有行输出到文件中。

$f = 'D:\usr\for_check' 
$files = ls $f 
&{Foreach ($file in $files) 
  { 
    $createtime = $file.CreationTime 
    $nowtime = get-date 
    if (($nowtime - $createtime).totalhours -le 2) 
    {
        "$file"
    } 
  }
 } | set-content c:\outfile.tx
于 2013-03-28T11:42:30.387 回答
1

你的代码太复杂了。像这样的东西会更 PoSh:

$src = "D:\usr\for_check"
$out = "C:\output.txt"

$append = $false

Get-ChildItem $src | ? {
  $_.CreationTime -ge (Get-Date).AddHours(-2)
} | % { $_.Name } | Out-File $out -Append:$append
于 2013-03-28T12:13:07.390 回答