You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows系统下如何使用Raku的-e、-n参数处理多文件glob通配符

Windows平台Raku保留-n参数的通配符扩展解决方案

问题根因

你遇到的通配符无法解析是Windows平台特有现象:

  • 类Unix系统的shell会自动展开通配符为文件名列表再传递给程序
  • Windows的cmd/PowerShell不会处理通配符,会直接把*.file这类原始字符串传给程序,所以Raku默认无法识别。

最简保留-n参数的方案

你之前探索的BEGIN块修改@*ARGS的思路是最优解,只需稍加简化即可:

当前目录通配符用法

raku -MIO::Glob -n -e "BEGIN { @*ARGS = @*ARGS.map(&glob).flat }; .say if /mydatabegin/" *.file *.file2
  • -MIO::Glob 预加载IO::Glob模块,省去在-e代码里写use的步骤
  • BEGIN块会在$*ARGFILES生成前执行,直接把@*ARGS里的通配符字符串替换为展开后的文件路径列表
  • 后续-n的逐行处理逻辑完全不变,和类Unix平台用法一致

带路径通配符用法

Windows下IO::Glob默认支持正斜杠作为路径分隔符,无需拆分路径的basename和dirname:

raku -MIO::Glob -n -e "BEGIN { @*ARGS = @*ARGS.map(&glob).flat }; .say" ../*.file ./subdir/*.log

如果必须使用反斜杠写路径,只需转义反斜杠即可:

raku -MIO::Glob -n -e "BEGIN { @*ARGS = @*ARGS.map(&glob).flat }; .say" ..\\*.file subdir\\*.log

常见问题说明

  • 输出带引号:你之前的测试中直接输出IO::Path对象会自动带引号,本方案中$*ARGFILES会直接读取文件内容输出纯文本行,不会出现多余引号
  • lines方法报错:glob返回的是IO::Path序列,需要遍历单个文件再调用lines方法,本方案通过修改@*ARGS让$*ARGFILES自动处理读行逻辑,无需手动调用lines

内容的提问来源于stack exchange,提问作者Gerard ONeill

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 13:27:02