在 Get-ChildItem 中指定 *.xls 过滤器也会返回 *.xlsx 结果

2023-12-06

我有一个包含 .xls、.xlsx 和 .xlsm 文件的文件夹,并且想仅过滤 .xls 文件。

为什么以下行不能按我的预期工作?我看到 .xls、.xlsx 和 .xlsm 结果。

Get-ChildItem $(Get-Location) -Filter *.xls | ForEach-Object { $_.Extension }

The -Filter参数的通配符匹配是not由PowerShell执行,它会传递到文件系统提供程序并最终传递到 Windows API。 那里执行的匹配存在许多遗留行为和怪癖,包括您所看到的:

  • In Windows PowerShell, -Filter *.xls实际上表现得像-Filter *.xls*。所以,-Filter *.xls匹配两者foo.xls and foo.xlsx, 例如;发生这种情况是因为8.3(短)文件名是also在幕后进行匹配;例如,foo.xlsx的 8.3 文件名看起来像FOO~1.XLS;请注意以下内容的截断(和大写).xlsx to .XLS.

  • While the short-name matching behavior no longer occurs in PowerShell [Core] v6+, fortunately, other legacy quirks persist[1], as does the most notable difference (which won't go away): only PowerShell wildcard expressions (see about_Wildcards) support character ranges / sets via [...] (e.g., [a-z]) - they're not supported with -Filter.

  • 使用-Filter参数总体上还是比较可取的 to -Path / -Include(见下文)由于其优越的性能(过滤发生在源头,而不是事后在 PowerShell 中)。

The 解决方法是使用-Path范围为了使用PowerShell 的通配符匹配:

Get-ChildItem -Path (Join-Path (Get-Location) *.xls) | ForEach-Object { $_.Extension }

# Or, more simply
Get-ChildItem -Path $PWD/*.xls | ForEach-Object Extension

Note: With -Recurse你会用-Include参数代替; without -Recurse, 的行为-Include (and -Exclude) is 不直观的,不幸的是 - 请参阅底部部分这个答案.


[1] 其他值得注意的怪癖:

  • 多次连续?通配符可以匹配名称fewer人物。

    • E.g., Get-ChildItem -Filter ??.txt火柴aa.txt并且出乎意料地也a.txt
  • Pattern *.匹配无扩展名的文件和目录名。

    • E.g., Get-ChildItem -File -Filter *.查找所有文件(-File)其名称没有扩展名(例如,file);这个怪癖实际上很有用,因为它是定位无扩展名文件的最简单且性能最好的方法(-Path *. does not工作,因为它寻找文件名字面上地结束于.).

    • 注:这是暂时地在 PowerShell Core 6.x 中进行了更改(从 6.2.3 开始),但该行为从 PowerShell Core 7.0 开始又恢复了。

  • 反过来,*.*还包括无扩展名的文件和目录名称。

See 这个优秀的答案 by Zenexer了解背景故事和血淋淋的细节。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Get-ChildItem 中指定 *.xls 过滤器也会返回 *.xlsx 结果 的相关文章

随机推荐

  • 如何在Android中有效地实时操作YUV相机帧?

    我在从 Android 获取的 NV21 框架的感兴趣区域 中心 周围添加黑色 0 填充CameraPreview线程中的回调 为了避免转换为 RGB 位图和反向的开销 我尝试直接操作 NV21 字节数组 但这涉及嵌套循环 这也会使预览 处
  • 通过 Selenium chromedriver 进行 Python 代理身份验证

    我们尝试了几天在 Python 中使用 selenium chromedriver 设置代理身份验证 我们无法设置 ip 因为 Chrome 会弹出一个身份验证弹出窗口 问题是硒无法切换到该窗口 因此无法输入 对我们有用的唯一解决方案是使用
  • Scala 中如何序列化函数?

    我正在尝试 akka 持久性 并遇到了对象序列化的典型问题 我的对象 如下所示 具有基本类型和功能 我读this this and this 但没有人帮助我使以下内容可序列化 测试工具 object SerializationUtil de
  • 不处理 MemoryStream / StringReader 可以吗?

    我想创建一个返回 XmlReader 的方法 根据具体情况 XmlReader 可能会被提供不同类型的流 要么是 StringReader 要么是 MemoryStream 通常我会使用 using 块来处理 StringReader 或
  • 正则表达式未使用 Unicode 字符范围

    NOTE 又被问到一个问题模式中带有 Uxxxxxxxx 字符的 C 正则表达式已经 这个问题的不同之处在于它不是关于如何计算代理对 而是关于如何在正则表达式中表达高于 0 的 unicode 平面 从我的问题中应该可以清楚地看出 我已经理
  • 如何在ListView中创建可点击的链接?

    我正在尝试使 URL 在 ListView 项目内可单击 我该怎么做呢 我希望它的工作方式是用户以纯文本形式存储链接 然后当我检索链接时 我想让它们在 ListView 中可单击 这是我在 read GetString 2 提取 URL 值
  • Node.js MySQL 插入问题[重复]

    这个问题在这里已经有答案了 考虑 exports adduser function connection return function req res Get form values var username req body usern
  • 如何将字符串的一部分转换为斜体?

    我要实现animal getScientificName如斜体 代码如下 我正在使用列表视图并在列表视图中设置文本 我不仅希望文本视图的一部分显示为斜体 无论如何我可以做到这一点 我附上了下面的部分代码 感谢您的帮助 String list
  • SwipeRefreshLayout 内的 Horizo​​ntalScrollView

    我实施了新的SwipeRefreshLayout我的应用程序中的组件 它适用于任何垂直视图 例如ListView GridView and ScrollView 它在水平视图中表现非常糟糕 例如HorizontalScrollView 当向
  • 使用节点的本机 mongoDB 驱动程序流式传输查询结果

    我在 mongoDB 集合中有 100 000 条记录 并尝试使用本机驱动程序在 node js 应用程序中检索它们 我按照中的例子CursorStream 的 MongoDB 文档但出现错误 RangeError Maximum call
  • mime_content_type 仅针对 css 和 js 文件返回 text/plain

    我遇到了 PHP 的 mime content type 这个奇怪的问题 它工作正常 除了 CSS 和 JavaScript 文件 它返回 text plain PHP 的默认 mime 设置为 text html 修改 mime type
  • 如果没有对象安全,Rust 会失去哪些安全保证?

    我试图理解对象安全的想法 我从文档中知道对象安全是以下内容 该特质并不要求这样Self Sized 它的所有方法都是对象安全的 如果对象安全所需的两个条件之一被放弃 哪些事情可能会导致安全 Rust 所提供的安全保证失败 From 自我满足
  • any() 函数检查两个 TRUE 而不是一个

    The any 来自基 R 的函数检查是否 给定一组逻辑向量 至少其中一个值是否为真 有没有办法使用any 函数 但让它检查是否至少有两个值是 true 而不是只有一个 如果没有 是否有另一个功能可以用来执行类似的操作 我们可以用 sum
  • 我可以告诉 javac 忽略缺少 `import foo.Bar` 吗?

    我正在使用反射来加载MyClass class 外部文件 在运行时 MyClass class使用图书馆Bar 这意味着我需要放置import foo Bar 在文件的顶部 但是 那Bar库已经在主类加载中加载MyClass 有没有办法让我
  • 未连接到调试器时,快速应用程序恢复在 WP8.1 上崩溃

    我正在使用 MVVM Light 开发 WP8 1 应用程序 默认情况下会激活快速应用程序恢复 这很棒 因为我想将其包含在应用程序中 当应用程序从 Visual Studio 启动时 它会按预期工作 然而 当应用程序直接在设备上启动时 就会
  • str 对象不可调用 python

    我尝试四处寻找答案 但是这里的问题要么似乎很高级 我是Python新手 要么是因为重新定义了我在脚本中无法理解的含义 这是代码 a float input Enter the length in inches b float input E
  • 是否可以让 css 选择器影响页面中的其他元素而不使用 javascript? [复制]

    这个问题在这里已经有答案了 例如 我想让两个文本框在其中一个获得焦点时具有相同的样式 div class divTxt div
  • Python 逆字母顺序

    我有这个输出 3 one 2 was 2 two 1 too 1 racehorse 1 a 我需要将具有相同编号的元组按相反的字母顺序放置在列表中 这是我的代码 def top5 words text split text text sp
  • html body ondblclick 获取被点击的元素

    所以在我的 html 中我有这部分 div dasd div div dasda div 在 javascript 中 该函数是 function myfunc do stuff here 我想知道在 myfunc 内部 html 主体的哪
  • 在 Get-ChildItem 中指定 *.xls 过滤器也会返回 *.xlsx 结果

    我有一个包含 xls xlsx 和 xlsm 文件的文件夹 并且想仅过滤 xls 文件 为什么以下行不能按我的预期工作 我看到 xls xlsx 和 xlsm 结果 Get ChildItem Get Location Filter xls