关闭

在通配符中使用范围运算符(Using the Range Operator in Wildcard Queries)

883人阅读 评论(0) 收藏 举报
如下翻译来自微软TechNet脚本中心:
http://www.microsoft.com/technet/scriptcenter/resources/pstips/jul07/pstip0706.mspx
译者: Edengundam(马涛)
 
在通配符中使用范围运算符(Using the Range Operator in Wildcard Queries)
在Windows PowerShell中, 你不会对像Get-ChildItem (一个基本等价于dir命令的cmdlet) cmdlet在执行查询时, 允许你使用像星号(*)和问好(?)的标准通配符感到惊讶. 例如, 假设你希望查看C:/Scripts目录下的所有以字符 a 开头的文件. 没问题; 只需要将星号作为你命令的一部分即可:
Get-ChildItem C:/Scripts/a*
这个例子没啥值得兴奋或: 在Windows PowerShell (和Cmd.exe中的星号一样)星号表示“任意个的字符,” 恩, 这个命http://www.microsoft.com/technet/scriptcenter/resources/pstips/jul07/pstip0706.mspx令返回所有文件名以字母a开头的后面跟着任意个字符的文件. (从本质上讲, 星号还表示空串: 文件名为A没有文件扩展名的文件也会被这个命令返回.)
同样的, 你可以使用问号表示文件名中的一个字符. 例如, 假设你有一些文件命名为FileA1.txt, FileA2.txt, FileA3.txt, 等等. (这个例子中, 一直包含到FileA9.txt文件). 你如何在一个命令中返回这些文件呢? 类似这样:
Get-ChildItem C:/Scripts/FileA?.txt
或者结合通配符, 在不考虑文件扩展名情况下, 返回所有的“FileA”文件:
Get-ChildItem C:/Scripts/FileA?.*
真是太棒了! 这里还有些更棒的工具. 假设你需要列出所有以字母 A-F开头的文件. 在Cmd.exe你如何完成它呢? 实话实说, 我们不会. 但是, 你可以在Windows PowerShell执行下面的命令来完成这个任务:
Get-ChildItem C:/Scripts/[a-f]*
正如你所见到, 这里我们使用了范围运算符 – [a-f] – 这个运算符要求PowerShell返回那些以指定字符开头的文件名: af. 通过在末尾添加星号, 我们进一步说明我们不关心跟随在第一个字符后面的其他字符(如果该文件名长度大于1). 当执行这个命令时, 我们将会得到什么样结果呢? 接过类似下面这样:
Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---         5/23/2007   9:52 AM         93 addresses.txt
-a---        11/17/2006   2:52 PM        708 alice.txt
-a---         2/26/2007 10:44 AM        732 Alice2.txt
-a---         3/12/2007   8:08 AM         88 bullet.gif
-a---         6/15/2007   8:07 AM       1060 ccs.csv
-a---         5/14/2007   8:41 AM          8 computers.txt
-a---         5/23/2007 10:36 AM        114 current.txt
-a---         2/22/2007 12:56 AM        730 decode.txt
-a---         2/26/2007 10:33 AM        732 Decoded.txt
-a---         2/22/2007   1:06 AM        728 Decrypt.txt
-a---         5/23/2007 10:36 AM         59 Differences.txt
-a---          7/3/2007 10:38 AM       5781 drawing.TXT
-a---          7/3/2007 10:47 AM      17920 drawing.xls
-a---          4/3/2007   8:29 AM      13824 Employees.xls
-a---         2/22/2007 12:44 AM       2916 encode.txt
-a---         2/26/2007 10:44 AM        732 Encoded.txt
-a---         2/21/2007 12:24 AM        732 EncodedAlice.txt
-a---         2/22/2007   1:06 AM       2852 Encrypt.txt
-a---         2/21/2007 12:10 AM       1458 Encrypted.txt
-a---         5/24/2007 10:08 AM        408 erase.vbs
-a---         10/9/2006   8:30 PM        649 fv.ps1
很棒吧? 只关心那些以 cf的文件? 这并没有什么问题; 只需要适当的设置范围运算符即可:
Get-ChildItem C:/Scripts/[c-f]*
这个运算符对数字也一样适用. 需要一个以数字而不是字母开头的文件列表嘛? 没问题(译注: Okey-doke这个就是OK的意思):
Get-ChildItem C:/Scripts/[0-9]*
当然了对于你关心一个范围的字符时, 这些例子做的很好了. 但是如果你只是对一个特定集合的字母感兴趣, 这些字母无法构成连续的范围呢? (例如, 以字母b, 字母d或字母f开头的文件.) 没问题; 你只需要将这些字母放在范围运算符中即可. 只要不指定连字符, PowerShell就知道将这些字母当作独立的字母而不是字幕范围来处理:
Get-ChildItem C:/Scripts/[bdf]*
它能不能做到啊? 它当然能啦:
Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---         3/12/2007   8:08 AM         88 bullet.gif
-a---         2/22/2007 12:56 AM        730 decode.txt
-a---         2/26/2007 10:33 AM        732 Decoded.txt
-a---         2/22/2007   1:06 AM        728 Decrypt.txt
-a---         5/23/2007 10:36 AM         59 Differences.txt
-a---          7/3/2007 10:38 AM       5781 drawing.TXT
-a---          7/3/2007 10:47 AM      17920 drawing.xls
-a---         10/9/2006   8:30 PM        649 fv.ps1
如果这样还不够, 你可以在你命令的任意位置使用范围运算符; 它不一定只用来表示第一个字符. 例如, 假设你需要列出第二个字母是 l, n, 或者r的文件. (我们并不知道你为什么需要这个列表; 假装你想要吧.) 这个使用问号表示文件名中第一个字母, 范围运算符表示第二个字母, 星号表示其余的字母的命令有点神奇:
Get-ChildItem C:/Scripts/?[lnr]*
这里你将看到期待的输出结果:
Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        11/17/2006   2:52 PM        708 alice.txt
-a---         2/26/2007 10:44 AM        732 Alice2.txt
-a---          7/3/2007 10:38 AM       5781 drawing.TXT
-a---          7/3/2007 10:47 AM      17920 drawing.xls
-a---         2/22/2007 12:44 AM       2916 encode.txt
-a---         2/26/2007 10:44 AM        732 Encoded.txt
-a---         2/21/2007 12:24 AM        732 EncodedAlice.txt
-a---         2/22/2007   1:06 AM       2852 Encrypt.txt
-a---         2/21/2007 12:10 AM       1458 Encrypted.txt
-a---         5/24/2007 10:08 AM        408 erase.vbs
-a---         5/24/2007 10:07 AM        850 WriteToCD.vbs
不错, 很不错.
 
 
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:434623次
    • 积分:6999
    • 等级:
    • 排名:第3237名
    • 原创:110篇
    • 转载:10篇
    • 译文:138篇
    • 评论:87条
    最新评论