在通配符中使用范围运算符(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
不错, 很不错.
 
 

相关文章推荐

PHP:使用范围解析操作符

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

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

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

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

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

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

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

jdk myeclipse 使用范围广

  • 2011-11-10 15:11
  • 43.93MB
  • 下载

Android 内部存储,外部存储使用范围和介绍

首先参考API文档: Android/android-sdk/docs/training/basics/data-storage/files.html内部存储:Internal storage It...

如何使用范围指示器增强鹰眼图或定位器地图

范围指示器是在某数据框内显示另一数据框范围的一种方法。它可用于创建鹰眼图或定位器地图。有时地图(主要地图或主地图)中所显示区域的轮廓无法轻易识别。要为地图浏览者提供空间环境,可能需要创建一个定位器地图...

进程间4种通信方式的使用范围

关于进程间4种通信方式的使用范围(转载) 2009-10-15 下午 08:45 1,管道,FIFO  2, 信号  3,消息队列  4,共享类存  那么这4种四种...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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