您的位置:首页 > 产品设计 > UI/UE

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

2007-09-25 17:05 621 查看
[align=left]如下翻译来自微软TechNet脚本中心: [/align]
[align=left]http://www.microsoft.com/technet/scriptcenter/resources/pstips/jul07/pstip0706.mspx[/align]
译者: 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返回那些以指定字符开头的文件名: a到f. 通过在末尾添加星号, 我们进一步说明我们不关心跟随在第一个字符后面的其他字符(如果该文件名长度大于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

很棒吧? 只关心那些以 c 到 f的文件? 这并没有什么问题; 只需要适当的设置范围运算符即可:
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

不错, 很不错.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐