如何在三个路径中搜索并在file.list上复制名称

时间:2018-06-07 14:01:27

标签: powershell

我想知道是否有更好的方法在PowerShell上制作这些说明的脚本:

  1. 搜索3条路径。实施例

    $LOGDIRS="C:\NETiKA\GED\Production\RI\log";"C:\NETiKA\GED\Test\RI\log";"C:\NETiKA\Tomcat-8.0.28\logs" 
    
  2. 查找超过7天的所有文件,并复制到我将调用file.list的文件中。 EX。 > C:\测试\的File.List

  3. 当我复制到我的file.list时,我需要搜索文件的所有名称并将其删除。

  4.   

    显然,当你有超过数千个文件时,就是这个   最快的删除方式。

    $LOGDIRS=C:/NETiKA/GED/Production/RI/log;C:/NETiKA/GED/Test/RI/log;C:/NETiKA/Tomcat-8.0.28/logs
    $KEEP=-7
    
    Get-ChildItem -Path $LOGDIRS -Recurse -Directory -Force -ErrorAction SilentlyContinue |
        Select-Object FullName > files.list |
        Foreach-Object {
            if ($_.LastAccessTime -le (get-date).adddays($KEEP)) {
                remove-item -recurse -force $_
            }
        };
    

2 个答案:

答案 0 :(得分:0)

这样的事情可以帮助你开始。

$path1 = "E:\Code\powershell\myPS\2018\Jun"
$path2 = "E:\Code\powershell\myPS\2018\Jun\compareTextFiles"
$path3 = "E:\Code\powershell\myPS\2018\May"
$allFiles = dir $path1, $path2, $path3 -File

$fileList = New-Item -type file file.list -Force

$keep = -7
$allFiles | foreach {
    if ($_.LastAccessTime -le (Get-Date).AddDays($keep)) {
        "$($_.FullName) is older than 7 days"
        $_.FullName.ToString() | Out-File $fileList -Append
    }
    else {
        "$($_.FullName) is new"
    }
}

如果您愿意,可以在IF Block的代码中添加删除,或者检查文件,稍后再进行操作。您的代码有许多对PowerShell来说非常基本的问题,例如:一旦使用Select-Object,下一个管道将只接收您选择的属性。当您选择继续使用FullName属性时,您已尝试在以后的管道中使用LastAccessTime。

此外,重定向到文件并再次使用管道看起来非常混乱。

答案 1 :(得分:0)

  • Remove-Item接受管道输入和
  • 过滤年龄的地方
  • 首先检查删除的内容我已将-WhatIf添加到Remove-Item
$LOGDIRS="C:\NETiKA\GED\Production\RI\log","C:\NETiKA\GED\Test\RI\log","C:\NETiKA\Tomcat-8.0.28\logs"
$KEEP=-7

Get-ChildItem -Path $LOGDIRS -Recurse -Directory -Force -ErrorAction SilentlyContinue |
    Where-Object LastAccessTime -le ((get-date).AddDays($KEEP)) 
        Remove-Item -Recurse -Force $_ -Whatif