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

how to check if file with same name but with different extension exists in a directory Powershell

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

  1. 如果存在同名不同扩展名的文件。
  2. 如果存在,我需要比较lastwritetime或者timestamp来找出哪个文件更新。

例如,如果我有一个文件culture.txt,我应该有一个相应的文件culture.log

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

如果culture.txtculture.log都可用,那么我想检查culture.txt是否在culture.log之后生成。如果 culture.txt 是在 culture.log 之前生成的,那就有问题了,我需要输出这样的 .txt 文件的名称,这个问题是 "Culture.txt was generated before culture.log- Please rerun the program".

如能提供帮助,我们将不胜感激。谢谢。

如果我能得到更多关于同一个问题的帮助。 Esperento 建议的代码完全可以正常工作,但要求已更新。在一个文件夹中,我有多个具有多个扩展名的文件,不仅限于 .txt 和 .log。我可以在同一个文件夹中包含 .doc、.docx、.xls 和许多其他文件。 现在关于更新的要求。我必须查找仅具有 3 个特定扩展名的文件名。其中之一是程序文件。显然应该首先生成哪个。假设 Culture.prog。然后当我 运行 和 Culture.Prog 两个文件将分别生成 culture.log 和 culture.txt 。 很明显,prog 上的时间戳比 log 上的时间戳早,而 log 上的时间戳比最后生成的 txt 早。 我们必须检查 2 个相应文件(log 和 prog)的可用性,仅参考最后生成的 .txt 文件。 因此,首先要检查的是 .txt 文件是否有 2 个对应的文件。接下来检查时间戳是否依次对应这 3 个文件。只有当其中一个条件不满足时我们才输出,否则如果我们不输出任何东西也可以。例如,如果对于 culture.txt,如果缺少 .log 或 .prog 文件,我们必须输出缺少哪个或两个文件的事实。如果 txt 文件的时间戳早于 log and/or prog,我们必须输出该事实。我希望我的要求清楚。谢谢

试试这个:

#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"