2012-06-11 25 views
3

现在,我有一个脚本可以获取目录中的最后五个文件。它看起来像这样:PowerShell脚本来选择目录中的某些文件

$diffs = Get-ChildItem "C:\usr\local\work\tnl\Database\ReleaseScripts" -Filter "*.sql" | Sort-Object Name -Descending | Select-Object -first 5 | Sort-Object Name 

我需要它选择所有的最后一个文件,从某一个开始。例如,如果该文件被命名为

201.txt
202.txt
203.txt
204.txt
高达
210.txt

我可能需要选择所有以203.txt开头的文件到列表的末尾。

我可以得到我正在查找的文件名并在脚本中使用它。我只是不熟悉我必须做的脚本工具。有没有办法编辑我的线,让它只在一行中完成,或者我必须把它放在一个循环中才能得到我的结果?

回答

4

这是工作,但需要扩展,如果您的文件名称结构更复杂或有一个机会,您的原始过滤器将抓住不符合文件名称。

$diffs = Get-ChildItem "C:\usr\local\work\tnl\Database\ReleaseScripts" -Filter "*.sql" |? 
{[Int][System.Text.RegularExpressions.Regex]::match($_.name,"\d+").Value -gt 201 }| 
Sort-Object Name -Descending | Select-Object -first 5 | Sort-Object Name 
+0

+1 - 词法与数值比较的优点。我认为这是很好的基础上,他的原始脚本按字母顺序排序的名称。 – JNK

+0

谢谢我为我工作,我也试过 '$ diffs = Get-ChildItem“C:\ usr \ local \ work \ tnl \ Database \ ReleaseScripts”-Filter“* .sql”|排序对象名称 - 降序| Where-Object {$ _。name -gt“201”} | Sort-Object Name' 使用Where-Object而不是select-object。我担心这不会实际选择对象,但它似乎做我想要的 – mrfreester

+0

只需注意,sql 2001将失败,然后测试,因为它是更少的词汇 – rerun

相关问题