2015-12-15 5 views
0

Я разбираю файл CSV с использованием сценария PowerShell. Я хотел бы сравнить дату, прочитанную из файла CSV с текущей датой, и выполнить определенный сценарий обработки операций или выхода. Может ли кто-нибудь помочь мне в обсуждении ниже?Дата сравнения от CSV до контрольной даты

Дата в файле CSV, как показано ниже:
Даты:, 2015-12-14

$CurrentTimeStamp = Get-Date 
$TradeDate = $CurrentTimeStamp.ToString("yyyyMMdd") 
$CheckDate = $TradeDate 

TradeDate, как указано выше:

$FileTradeDate = $Cols[1] 
$TradeDate = $FileTradeDate.ToString("yyyy-MM-dd") 
if ($TradeDate -ne $CheckDate) { 
    $host.Exit() 
} else { 
    $TradeDate = $FileTradeDate 
    LogWrite $TradeDate 
} 

Я получаю ниже ошибки:

Cannot find an overload for "ToString" and the argument count: "1". 
At \\multinasdub301\Software\SysAdmin\WebDownloads\ProcessUBSFrescoCCYHDG.ps1:139 char:5 
+     $TradeDate = $FileTradeDate.ToString("yyyy-MM-dd") 
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : NotSpecified: (:) [], MethodException 
    + FullyQualifiedErrorId : MethodCountCouldNotFindBest 

ответ

0

Данные, считываемые из файла CSV, уже являются строкой, а из y наш пример, похоже, уже находится в формате yyyy-MM-dd, поэтому нет необходимости снова преобразовывать его в строку. Необходимо отформатировать $checkDate в том же формате, хотя, в противном случае строка никогда не будет соответствовать:

$CheckDate = (Get-Date).ToString('yyyy-MM-dd') 

Или можно разобрать дату из CSV до фактического DateTime значения и сравнить две даты:

$CheckDate = (Get-Date).Date 
$culture = [Globalization.CultureInfo]::InvariantCulture 

Import-Csv 'C:\path\to\your.csv' | 
    Select-Object -Property *, @{n='Trading Date';e={ 
     [DateTime]::ParseExact($_.'Trading Date', 'yyyy-MM-dd', $culture) 
    }} -Exclude 'Trading Date' | 
    ForEach-Object { 
    if ($_.'Trading Date' -eq $CheckDate) { 
     $TradeDate = $FileTradeDate 
     LogWrite $TradeDate 
    } 
    } 
+0

попробовал первый вариант и дал мне ошибку ниже: 'Ошибка метода, потому что [System.Management.Automation.Internal.Host.InternalHost] не содержит метода с именем 'Exit'. В \\ multinasdub301 \ Software \ SysAdmin \ WebDownloads \ ProcessUBSFrescoFI.ps1: 148 char: 6 + $ Host.Exit() + ~~~~~~~~~~~~ + Категория: InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId: MethodNotFound' –

+0

Это не связано с вашим вопросом, но используйте 'exit' вместо' $ host.Exit() '. Вернее, не выходите, но инвертируйте условие и ничего не делайте, если даты не равны. См. Обновленный ответ. –