繁体   English   中英

根据文件夹和文件名输出

[英]Output on the basis of folder and file name

我有一些目录结构,如下所示,其中最后一个文件夹名称将是每天更改的当前日期,如下所示:

D:\data\Backup\WINDOWSDATA\18-03-2015
D:\data\Backup\LINUXDATA\18-03-2015
D:\data\Backup\UBUNTUDATA\18-03-2015

在每个日期文件夹(18-03-2015)下, maximum four .dat files的名称带有不同的时间戳,如下所示:

BKP_DS_FETCHER_6AM.dat
BKP_DS_FETCHER_10AM.dat
BKP_DS_FETCHER_2PM.dat
BKP_DS_FETCHER_6PM.dat

我正在尝试基于简单逻辑在output.txt文件中生成以下结果,即如果.dat文件存在特定时间,则应该Success否则在output.txt Failed ,例如如下所示:

output.txt:

FOLDER_NAME       6AM       10AM     2PM       6PM
WINDOWSDATA       Success   Failed   Success   Success
LINUXDATA         Success   Success  Failed    Success
UBUNTUDATA        Failed    Success  Success   Success

请有人可以帮助我展示实现它的方法(批处理或Powershell)吗?

这是在PowerShell中执行此操作的方法:

$date = Get-Date -Format 'yyyy-MM-dd'

$basePath = 'D:\data\Backup\'
$outputPath = 'D:\data\Backup\output_' + $date + '.txt'

$baseFileName = 'BKP_DS_FETCHER_[HOUR].dat'
$hours = @( '6AM', '10AM', '2PM', '6PM' )


function Check-Folder( $folderName )
{
    $resultLine = New-Object -TypeName System.Object 
    $resultLine | Add-Member -MemberType NoteProperty -Name 'FOLDER_NAME' -Value $folderName

    foreach( $h in $script:hours )
    {
        $path = $script:basePath + $folderName + '\' + $script:date + '\' + $script:baseFileName.Replace('[HOUR]',$h)
        #Write-Host $path

        if( Test-Path -Path $path )
        {
            $resultLine | Add-Member -MemberType NoteProperty -Name $h -Value 'Success'
        }
        else
        {
            $resultLine | Add-Member -MemberType NoteProperty -Name $h -Value 'Failed'
        }
    }

    return $resultLine
}

$results = @()

$results += Check-Folder 'WINDOWSDATA'
$results += Check-Folder 'LINUXDATA'
$results += Check-Folder 'UBUNTUDATA'

$results | Format-Table -AutoSize | Out-File -FilePath $outputPath

输出将如下所示:

FOLDER_NAME 6AM     10AM    2PM     6PM   
----------- ---     ----    ---     ---   
WINDOWSDATA Success Failed  Success Success
LINUXDATA   Failed  Failed  Failed  Failed
UBUNTUDATA  Failed  Success Failed  Failed
Push-Location D:\data\Backup
$todayDir = Get-Item (get-date -Format 'dd-MM-yyyy') -ErrorAction SilentlyContinue
if($todayDir)
{
Push-Location $todayDir
$logResult = @{}
dir -Directory | foreach {
$logResult.($_.Name) = $_.Name | Get-ChildItem -Filter '*.dat' |
foreach {
           $isMatch = $_.Name -match 'BKP_DS_FETCHER_(?<hour>.*).dat$'
           if($isMatch) {
            $Matches.hour
           }
        }
    }

$hourProperties = ($logResult.Values | foreach {$_}) |  Sort-Object | Get-Unique 

$logResult.Keys | foreach {
$obj = New-Object pscustomobject
$obj | Add-Member -MemberType NoteProperty -Name 'FOLDER_NAME' -Value $_
foreach($p in $hourProperties) {
        $v=$null
        if($logResult[$_] -contains $p) { 
            $v = 'Success'
        }
        else {
            $v = 'Failed' 
        }
        $obj | Add-Member -MemberType NoteProperty -Name $p -Value $v
    }

    $obj
    } | Format-Table 

    Pop-Location

}
Pop-Location

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM