比较CreationTime和用户输入

时间:2018-12-06 23:20:52

标签: powershell

我正在尝试使程序查找在特定日期创建的所有文件。如何使用户输入的格式相同,以便可以将两者进行比较?

感谢您的帮助。

$root= [Environment]::GetFolderPath("Desktop")
Write-Host "Programa de reenvío a unbilling." -fore white
$fecha = Read-Host -Prompt 'Colocar fecha que desea enviar. FORMATO DD/mm/YY. Ejemplo 31/12/2018 '
Get-ChildItem "$root\UNB\FINAL_TEXTO\" -Filter *.txt | Where-Object CreationTime -EQ ([DateTime]::Parse($fecha))

    Foreach-Object {
    $archivo= $_.Name
    Write-Host "Facturas encontrada: $archivo " -fore green
    #start-process -filepath "$root\UNB\FINAL_TEXTO\$archivo" -verb print | out-printer "UNBILLING" 

    }

3 个答案:

答案 0 :(得分:1)

日期格式与您的问题有关:只要[DateTime]::Parse($fecha)成功将用户输入转换为[datetime]实例,.NET日期/时间算术将按预期工作(并且为用户提供一个用于选择日期的GUI方法可能会有所帮助,但类似的情况是眼前的问题)。

真正的问题是*Time*输出的[System.IO.FileInfo][System.IO.DirectoryInfo]实例上的Get-ChildItem属性是特定的时间点,这意味着它们反映了日期和时间 ,因此使用-eq将其与日历进行比较-day-only 时间戳,因为类似[datetime]::Parse('2018-12-31')这样的东西会返回 [1] 用作预期

要仅访问[datetime]实例的 date 部分(日历日的 start ),请使用.Date属性:

Get-ChildItem "$root\UNB\FINAL_TEXTO" -Filter *.txt | 
  Where-Object { $_.CreationTime.Date -eq [DateTime]::Parse($fecha) }

请注意,由于需要嵌套属性访问,因此必须在表达式中使用 script块


当然,最好先将用户输入解析为字符串 ,以查看其是否代表有效日期:确保$refDate = [DateTime]::Parse($fecha)不会引发异常;如果是这样,请重新提示。


[1]请注意,[datetime]::Parse('<date-string>')使用 current 文化来解析字符串,而[datetime] '<date-string>'将使用不变文化。

答案 1 :(得分:1)

图形化日期选择器不需要用户输入特殊格式,
这是一个非常简洁的年日历功能,具有星期和星期几。

## Q:\Test\2018\12\07\SO_53661152.ps1
[void][System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms")
Function Pick-Date {
  $Cal = New-Object System.Windows.Forms.MonthCalendar
  $Cal.ShowWeekNumbers = $true
  $Cal.MaxSelectionCount = 1
  $Cal.Dock = 'Fill'
  $Form = New-Object Windows.Forms.Form
  $Form.text = "Colocar fecha que desea enviar. [enter]"
  $Form.Size = New-Object Drawing.Size @(656,620)
  $btnSelect = New-Object System.Windows.Forms.Button
  $btnSelect.Size = "100,100"
  $btnSelect.add_Click({ $Form.close() })
  $btnSelect.Location = New-Object System.Drawing.Point(530,480)
  $btnSelect.Text="ENTER"
  $Form.Controls.Add($btnSelect )
  $Form.AcceptButton = $btnSelect
  $Form.Controls.Add($Cal)
  $Form.Add_Shown({$Form.Activate()})
  [void]$Form.ShowDialog()
  return (Get-Date($Cal.SelectionStart))
}

$root= [Environment]::GetFolderPath("Desktop")
Write-Host "Programa de reenvío a unbilling." -fore white

$fecha = Pick-Date

Get-ChildItem "$root\UNB\FINAL_TEXTO\" -Filter *.txt | 
  Where-Object {$_.CreationTime.Date -EQ $fecha} | Foreach-Object {
    $archivo = $_.Name
    Write-Host "Facturas encontrada: $archivo " -fore green
    #start-process -filepath "$root\UNB\FINAL_TEXTO\$archivo" -verb print | out-printer "UNBILLING" 
}

月份名称,第一周,一周的第一天取决于语言环境/用户设置。

enter image description here

答案 2 :(得分:0)

这就是答案:

body {
  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
}

#chartdiv {
  width: 100%;
  height: 500px;
}