根据文件夹和文件名输出

时间:2015-03-18 08:11:16

标签: windows powershell batch-file

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

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 Failed output.txt例如如下:

output.txt的:

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

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

2 个答案:

答案 0 :(得分:0)

以下是在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

答案 1 :(得分:0)

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

enter image description here