我试图在这里找到两件事。我的文件夹中有成千上万的文件。以一个文件为例,我们可以将相同的逻辑应用于所有文件
- 如果具有相同名称但存在不同扩展名的文件。
- 如果存在,我需要比较上写入时间或时间戳,以找出哪个文件更新。
例如,如果我有一个文件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.log-请重新运行程序"。
任何可以提供帮助的人都将不胜感激。谢谢。
如果我能得到更多的问题,需要更多的帮助。Esperento建议的代码完全正常工作,但要求更新。在一个文件夹中,我有多个具有多个扩展名的文件,而不限于.txt和.log。我可以在同一文件夹中使用.doc,.docx,.xls和许多其他文件。现在关于更新的要求。我必须寻找只有3个特定扩展名的文件名。其中之一是程序文件。显然应该首先生成。假设文化。然后,当我运行文化时,将分别像culture.log和culture.txt一样生成两个文件。因此,很明显,Prog上的时间戳比日志更古老,并且日志上的时间戳比TXT年龄更古老,TXT产生了最后的时间戳。我们必须检查仅对.txt文件的2个相应文件(日志和prog)的可用性,该文件是最后生成的。因此,第一个检查是,如果有2个相应的文件可用于.txt文件。接下来的检查是时间戳对应于这3个文件。我们只有在不满足条件之一的情况下只能输出,否则我们不输出任何内容时就可以了。例如,如果对于culture.txt,则缺少.log或.prog文件,我们必须输出一个或两个文件丢失的事实。如果TXT文件的时间戳比日志和/或PROG更古老,则必须输出该事实。我希望我的要求清楚。谢谢
尝试以下:
#list file and group by name without extension
Get-ChildItem "C:temptest" -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:temptestresult.txt"