如何从powershell中的csv文件列表中grep日期模式?

如何从powershell中的csv文件列表中grep日期模式?,powershell,grep,Powershell,Grep,我有一个目录中的文件列表,其中包含不同的日期,例如: 1. test_2017-01-01.csv 2. test_2017-02-01.csv 3. test_2017-03-01.csv 4. test_2017-04-01.csv 假设我想将所有文件拉入一个新列表,该列表标记为$files,其中只包含2017-01-01和2017-03-01日期之间的文件。我该怎么办?我现在可以从目录中提取如下内容: $files = Get-ChildItem "my_directory" | Sor

我有一个目录中的文件列表,其中包含不同的日期,例如:

1. test_2017-01-01.csv
2. test_2017-02-01.csv
3. test_2017-03-01.csv
4. test_2017-04-01.csv
假设我想将所有文件拉入一个新列表,该列表标记为
$files
,其中只包含2017-01-01和2017-03-01日期之间的文件。我该怎么办?我现在可以从目录中提取如下内容:

$files = Get-ChildItem "my_directory" | Sort-Object

不确定这是否可以轻松转换为日期格式查询。你认为在这种情况下正则表达式对你有用吗

$files = Get-ChildItem | Where-Object {$_.Name -match "^test_2017-0[123]{1}-01.csv$"}
有相当长的一行程序,但它完成了您要完成的工作—将文件名中的数字字符串(格式必须为yyyy-MM-dd)转换为日期,然后计算它是否在指定的范围内

$files = Get-ChildItem | Where-Object {($_.Name -match "[\d]{4}-[\d]{2}-[\d]{2}") -and ([datetime][regex]::Match($_.Name, "[\d]{4}-[\d]{2}-[\d]{2}").Value -ge (Get-Date 2017/01/01)) -and ([datetime][regex]::Match($_.Name, "[\d]{4}-[\d]{2}-[\d]{2}").Value -le (Get-Date 2017/03/01))}

$files=GCI'my_directory'|?{[datetime]'1/1/2017'-le$.basename.split(''''-1]-和[datetime]'3/1/2017'-ge$\.basename.split('-1]}
我发现此解决方案有一个错误:无法将“01/01/2017 00:00”与“01/01/2017 00:00”进行比较。错误:“无法将值”“转换为类型”System.DateTime“。错误:“字符串未被识别为有效的DateTime。”“如果这不起作用,则文件名的格式可能不符合建议。也许用
($..basename-replace.*(\d{4}-\d\d-\d\d-\d\d.*),“$1”)替换
$..basename.split(“'.'''[-1]
”,而不是从文件名中删除日期字符串。这可以为某个日期提取文件,我如何为此构建范围?尝试查找正则表达式。你可以很好地(不是说最简单的方法)说明你想要什么。还用一行很难理解的句子扩展了我的答案。希望能有帮助