【问题标题】:how to check if file with same name but with different extension exists in a directory Powershell如何检查目录Powershell中是否存在具有相同名称但具有不同扩展名的文件
【发布时间】:2017-07-17 15:02:13
【问题描述】:

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

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

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

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

如果culture.txtculture.log 都可用,那么我想检查culture.txt 是否是在culture.log 之后生成的。如果culture.txtculture.log 之前生成,则存在问题,因此我需要输出此类.txt 文件的名称,此问题为“Culture.txt 是在culture.log 之前生成的-请重新运行程序”。

任何可以提供帮助的人将不胜感激。谢谢。

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

【问题讨论】:

  • 这是一个相当简单的任务。到目前为止,您尝试过什么?
  • 我尝试过各种代码,例如 $log = (gci -Filter *.log | % {$_.BaseName}) $txt = (gci -Filter *.txt | % {$_ .BaseName})|其中 {$log.basename -eq $_.basename} [string]$Data = 比较对象 -ReferenceObject $txt -DifferenceObject $log -Property Name,LastWriteTime | Sort-Object Name |Out-String foreach-object |{ if ($log-$_.Lastwritetime) -gt ($txt-$_.Lastwritetime) Write-Host "xxxxxxxxxxxxxxxxxxxl"}

标签: powershell timestamp compare exists


【解决方案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"

【讨论】:

  • 非常感谢世界语。非常感谢您的帮助。它工作得很好。
猜你喜欢
  • 2015-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-24
  • 2022-10-17
  • 2021-11-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多