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

翻译 2007年09月25日 17:05:00
如下翻译来自微软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
不错, 很不错.
 
 

JDK8的随笔(03)_Lambda表达式的变量使用范围讨论

Lambda变量使用以及使用范围概念普及 捕获变量 capture variables啥是capture variables先看一段代码的例子:public class LocalClassExamp...

jsp常用内置对象及其使用范围

jsp内置对象是为了简化用户的开发而由容器自动为用户进行的实例化对象,使得用户可以不必向Java当中那样使用关键字new一个实例化对象之后才能够进行使用 常用的jsp内置对象主要有5种: pageCo...

电子签名使用范围、作用和价值、应用前景 ?

from http://www.smartsys.cn/faq-5.html 电子签名使用范围:   电子签名的作用和使用范围一般用于:合同订立、网上报税、电子发票、网上结算、企业年检...

集体智慧总结和使用范围归纳(三)

支持向量机(SVM) 先上图说明: 这是一种监督式的分类方法,适合于数据量比较大的情况。即是首先对已知数据进行区域判定,之后位置数据落在哪个区域内,就判断是属于哪个分类。 训练 这里假设对户主进行...

PHP:使用范围解析操作符

面向对象编程中会使用到一些它自己的操作符,如->,这个符号用来在对象中访问它自己的成员。另外一个是范围解析操作符:两个冒号连在一起(::)。这个符号用于在类中(而不是对象中)访问成员。使用方式如下: ...

集体智慧总结和使用范围归纳(二)

接着上篇继续: 神经网络 类型有非常多了。这里仅介绍一下多层感知器网络。她由两层神经元构成,第一层是感知神经元,负责将输入传递给第二层的隐藏神经元。最后由隐藏神经元输出,得到一组数字(没有实际的意...

The Java™ Tutorials — Generics :Guidelines for Wildcard Use 通配符使用指南

The Java™ Tutorials — Generics :Guidelines for Wildcard Use 通配符使用指南 原文地址:https://docs.oracle.com/...

OCP-1Z0-051 补充题库 第8题 子查询的使用范围

一、原题 Where can sub queries be used? (Choose all that apply) A. field names in the SELECT statement...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在通配符中使用范围运算符(Using the Range Operator in Wildcard Queries)
举报原因:
原因补充:

(最多只允许输入30个字)