如何检查目录Powershell中是否存在具有相同名称但具有不同扩展名的文件

时间:2017-02-27 05:18:35

标签: powershell timestamp compare exists

我想在这里找到两件事。我在一个文件夹中有数千个文件。让我们举一个文件的例子,我们可以对所有文件应用相同的逻辑

  1. 如果存在具有相同名称但具有不同扩展名的文件。
  2. 如果存在,我需要比较lastwritetime或时间戳以找出哪个文件更新。
  3. 例如,如果我有一个文件culture.txt,我应该有一个相应的文件culture.log

    如果我有culture.txtculture.log文件丢失,那么这是一个问题,所以我想输出所有.txt文件的名称,缺少相应的.log文件。

    如果culture.txtculture.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,我们必须输出该事实。我希望我的要求清楚。谢谢

1 个答案:

答案 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"