【发布时间】:2014-05-22 23:41:12
【问题描述】:
我正在尝试在文件夹中查找 .sql 文件并根据上次写入时间过滤它们。根据上次写入时间,我得到了 4 个文件作为输出。
TestScript10.sql
TestScript5.sql
TestScript6.sql
TestScript7.sql
现在,当我的命令尝试执行排序对象时,我在顶部看到的是 Testscript10 而不是 TestScript5,我该如何解决这个问题?
我的代码
$File= Get-ChildItem $FileLocation -Filter *.sql | Where-Object {$_.LastWriteTime -gt $datetime} | Sort-Object Name
$File 输出
[DBG]: PS SQLSERVER:\>> $File
Directory: C:\SQLScripts
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 5/22/2014 10:20 AM 61 TestScript10.sql
-a--- 5/22/2014 10:16 AM 60 TestScript5.sql
-a--- 5/22/2014 10:24 AM 66 TestScript6.sql
-a--- 5/22/2014 10:10 AM 24 Testscript7.sql
【问题讨论】:
-
由于名称是一个字符串,它正在执行字符串比较。由于“1”在“5”之前,因此它们按您所见的顺序排列(它永远不需要检查“0”字符)。如果您希望它们以其他方式排序,则必须检索名称的该部分(将其转换为 int)并按其排序。
-
您应该像这样命名您的文件:TestScript01.sql、TestScript02.sql 等(或“001”或其他名称,具体取决于有多少。)它们会按名称正确排序.
标签: .net powershell