我正在尝试使程序查找在特定日期创建的所有文件。如何使用户输入的格式相同,以便可以将两者进行比较?
感谢您的帮助。
$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"
}
答案 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"
}
月份名称,第一周,一周的第一天取决于语言环境/用户设置。
答案 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;
}