【问题标题】:Powershell select values betweenPowershell选择值之间
【发布时间】:2020-08-13 01:48:59
【问题描述】:

我有一个提供昨天日出和日落时间的脚本($sunrise 和 $sunset,格式为 yyyy-MM-dd HH:mm:ss)。我有一个文件(可能是 txt 或 csv),其中第一列的时间戳格式为 yyyy-MM-dd HH:mm:ss,第二列的数字格式为 XX.X。使用 Powershell Get-Content,我试图返回日出和日落时间之间的所有值,包括在内。使用 Select,我可以获得奇异值,但我不知道如何获得多个,更不用说范围了。

Get-Content C:\uv.txt | select (between $sunrise & $sunset)

输入(uv.txt):

2020-08-11 06:00:00 0.0
2020-08-11 07:00:00 0.0
2020-08-11 08:00:00 0.6
2020-08-11 09:00:00 1.4
2020-08-11 10:00:00 4.2
2020-08-11 11:00:00 6.2
2020-08-11 12:00:00 8.4
2020-08-11 13:00:00 9.3
2020-08-11 14:00:00 9.2
2020-08-11 15:00:00 7.6
2020-08-11 16:00:00 5.6
2020-08-11 17:00:00 3.3
2020-08-11 18:00:00 1.6
2020-08-11 19:00:00 0.5
2020-08-11 20:00:00 0.0
2020-08-11 21:00:00 0.0
2020-08-11 22:00:00 0.0

不工作的简化脚本(控制台没有输出或者如果我发送到输出文件):

$sunrise  = "2020-08-12 06:32:17"
$sunset   = "2020-08-12 20:06:33"

Get-Content C:\daily_values_uv.txt | Where-Object { $_ -ge $sunrise -and $_ -le $sunset }

【问题讨论】:

  • 明白,@mklement0。也许我会看看另一种方式来做到这一点。我通过 mysql 查询创建输入文件,我可以通过批处理或 powershell。而且我一直在尝试找出最简单的方法来操作结果....在 mysql 查询中这样做或在批处理或 ps 中这样做。
  • 考虑到批处理和 PowerShell 之间的选择,PowerShell 绝对是要走的路:它具有非常出色的功能。例如,您可以将时间戳字符串转换为 [datetime] 以获取 System.DateTime 实例(例如,[datetime] '2020-08-10 00:00:00'),您还可以将其与 -ge-le 进行比较,并执行时间跨度计算。跨度>
  • 如果这是在数据库中,直接查询数据库而不是提取比需要更多的数据然后在事后编写脚本不是更有效吗?
  • 您的输入行都属于日历日2020-08-11,而您的比较变量属于2020-08-12 - 您不应该期望任何输出。
  • 哦,我的……@mklement0 你是对的!我发现了这个问题。一个丢失的字母导致 api 今天而不是昨天被拉动......我应该在一天前抓住这个。现在调整生成的 txt 文件以删除时间戳。感谢您的帮助!

标签: powershell


【解决方案1】:

感谢大端日期格式,您可以这样做:

Get-Content C:\uv.txt | Where-Object { $_ -gt $sunrise -and $_ -lt $sunset }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-14
    • 2014-04-16
    相关资源
    最近更新 更多