簡體   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