【问题标题】:Filename globbing Windows vs. Unix文件名通配 Windows 与 Unix
【发布时间】:2012-07-19 08:58:16
【问题描述】:

在仅使用通配符的 Windows 标准外壳中是否可以实现类似的操作?

$ ls -1 003[5,8]0
00350
00380

【问题讨论】:

    标签: windows unix batch-file glob filepattern


    【解决方案1】:

    不在标准 Windows 命令外壳 (cmd.exe) 中。它只理解 ?和 * 通配符;没有正则表达式。

    您是否可以选择安装 Cygwin、Windows Powershell 或其他增强型 shell?

    【讨论】:

    • 不幸的是,我无法安装任何其他 shell,因为这是一个生产环境,我无权这样做
    • 我不认为这是绝对正确的。您可以使用来自管道的dir 命令的输入使用findstr 执行正则表达式,我不知道如何编写它,但我认为它应该是可能的。我敢肯定@dbenham 或@jeb 会想出一些东西:)
    • 很公平。如果您只想要文本输出而不是命令的任何副作用,那么dir | findstr /r "003[5,8]0" 将起作用。
    • 我会接受这个答案,因为 Windows 中没有原生方式......只能使用其他命令,这在我的情况下不是一个选项
    • 我尝试了@Simbilis 的这种hack,但在cmd.exe 输出中没有结果,我的工作目录中也没有任何新内容。
    【解决方案2】:

    是的,你可以。不是使用单个命令,而是使用FORIF 的组合。试试这个让你开始......

    setlocal enabledelayedexpansion
    for %%a in (003?0) do (
      set fn=%%a
      set fnl=!fn:~3,1!
      if .!fnl!==.5 (
        echo !fn!
      )
      if .!fnl!==.8 (
        echo !fn!
      )
    )
    

    【讨论】:

      猜你喜欢
      • 2017-09-02
      • 1970-01-01
      • 2011-03-19
      • 1970-01-01
      • 2011-05-15
      • 2012-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多