文件名通配符:Windows与Unix的区别

5
这种情况在Windows标准shell中只使用通配符是否可能实现?
$ ls -1 003[5,8]0
00350
00380
2个回答

5

不支持标准的Windows命令行(cmd.exe)。它只能理解?和*通配符,不能使用正则表达式。

您是否有安装Cygwin、Windows Powershell或其他增强型shell的选项?


很不幸,由于这是一个生产环境且我没有权限进行安装,因此我无法安装任何其他的 shell。 - lukuluku
我不认为那是严格正确的。你可以使用findstr和来自管道dir命令的输入进行正则表达式匹配,我不确定如何编写它,但我认为这应该是可能的。我相信@dbenham或@jeb能够想出一些解决方案 :) - Bali C
好的。如果你只想要文本输出而不需要命令的任何副作用,那么 dir | findstr /r "003[5,8]0" 就可以了。 - Simbilis
1
我会接受这个答案,因为在Windows中没有本地的方法...只能使用其他命令,而这对我来说不是一个选项。 - lukuluku
我尝试了@Simbilis的这个黑客技巧,但是在cmd.exe输出中没有结果,也没有任何新的东西出现在我的工作目录中。 - panny

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!
  )
)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接