|我已经整理了一个小脚本,在屏幕上显示正在处理的文件,让管理员知道脚本正在运行,然后输出过去6个月内修改过的旧文件的名称到tx.t或csv:
get-childitem z:\directory\ -recurse | %(write-host Processing File: $_.fullname; $_} | Where{$_.lastwritetime -gt (get-date).addDays(-182) | out-file C:\scriptoutput\
这似乎工作得很好,但我想调整一下来这样做 1.它仍然提到文件正在处理中。 2.如果该目录和子目录中没有项目,则它不输出文件,而只是在屏幕上打印出没有超过6个月的文件。
我曾尝试过以下几点:
$Files= @(get-childitem z:\directory\ -recurse | where{$_.lastwritetime -gt (get-date).AddDays(182)} | %{write-host processing file: %_.fullname' $_})
If ($Files.lastwritetime -gt (get-date.adddays(-182))} | out-file 'c:\scriptoutput\'
Else ($files.lastwritetime lt (get-date.adddays(-182))} | {write-host "****NO FILES WERE MODIFIED IN THE LAST 6 MONTHS****})
显然这不起作用,我在if(condition)错误后得到一个Missing statemnt块。任何人都可以帮助TOTAL NOOB去哪一个吗?
非常感谢,
答案 0 :(得分:0)
这是一个简单的拼写错误问题。命令
%{write-host processing file: %_.fullname' $_}
包含不平衡报价。尝试
%{write-host "processing file: %_.fullname" $_}
为了捕捉这种错误,请使用SciTE或内置的Powershell ISE等编辑器。编辑器有语法元素的颜色提示。遇到不平衡的报价时,结果看起来很乱。请注意,很多文字都是青色而不是蓝色和黑色:
答案 1 :(得分:0)
我会建议这样的事情,但我不确定这是不是你所追求的。
$files = @(get-childitem z:\directory\ -recurse | where {$_.lastwritetime -gt (get-date).AddDays(-182)})
if ($files.Count -gt 0)
{
$files | %
{
$_.FullName | Out-file 'c:\scriptoutput\somecsv.csv' -Append
}
}
else
{
write-host "****NO FILES WERE MODIFIED IN THE LAST 6 MONTHS****"
}