我想在这里找到两件事。我在一个文件夹中有数千个文件。让我们举一个文件的例子,我们可以对所有文件应用相同的逻辑
例如,如果我有一个文件culture.txt
,我应该有一个相应的文件culture.log
。
如果我有culture.txt
但culture.log
文件丢失,那么这是一个问题,所以我想输出所有.txt文件的名称,缺少相应的.log文件。
如果culture.txt
和culture.log
都可用,那么我想检查culture.txt
之后是否生成了culture.log
。如果在culture.txt
之前生成culture.log
,则会出现问题,我需要输出此类.txt文件的名称,这个问题说" Culture.txt是在culture.log-之前生成的请重新运行该程序"。
任何可以提供帮助的人都将不胜感激。谢谢。
如果我能得到,在同一问题上需要更多帮助。 Esperento建议的代码完全正常,但要求已更新。在一个文件夹中,我有多个具有多个扩展名的文件,不仅限于.txt和.log。我可以在同一文件夹中包含.doc,.docx,.xls和许多其他文件。 现在关于更新的要求。我必须只查找具有3个特定扩展名的文件名。其中一个是程序文件。应该首先明确生成哪个。我们说Culture.prog。然后当我运行Culture.Prog时,将生成两个文件,分别是culture.log first和culture.txt。 很明显,prog上的时间戳早于log,日志上的时间戳早于最后生成的txt。 我们必须检查2个相应文件(log和prog)的可用性,仅参考最后生成的.txt文件。 因此,首先检查是否有2个相应的文件可用于.txt文件。下一步检查是按顺序对应这3个文件的时间戳。我们只有在不满足其中一个条件时才输出,否则如果我们不输出任何东西就可以输出。例如,如果对于culture.txt,如果缺少.log或.prog文件,我们必须输出缺少哪个或两个文件的事实。如果txt文件的时间戳早于log和/或prog,我们必须输出该事实。我希望我的要求清楚。谢谢
答案 0 :(得分:1)
试试这个:
#list file and group by name without extension
Get-ChildItem "C:\temp\test" -file -filter "*.*" | group Basename |
%{
$group= $_.group
# if not same name, missing message
if ($_.Count -eq 1)
{
"'{0}' are missing" -f $group.Name
}
#else search into current group file with great creation time and print message
else
{
$group | % {$file=$_; $group | %{if ($_.CreationTime -gt $file.CreationTime) {"'{0}' has beeen generated before '{1} " -f $file.Name, $_.Name} } }
}
} | out-file "C:\temp\test\result.txt"