Curingas de prompt de comando para dígitos?

1

Existe algum caractere curinga para um dígito no prompt de comando?

Por exemplo,

dir *.1*

Listará todos os arquivos cujos ramais começam com 1.

    
por Archival 19.10.2012 / 16:41

2 respostas

2

Não, o MS-DOS suporta apenas dois caracteres curinga (baseados em CP / M). Eles são "*", indicando qualquer sequência de caracteres e "?", Indicando um único caractere. Não há distinção de alfabetos e numerais nos curingas e não há suporte para expressões regulares para restringir o caractere curinga a dígitos.

    
por 19.10.2012 / 17:11
2

A resposta para a sua pergunta literal é 'não' - mas se a sua verdadeira questão for:

Can I somehow select only files containing a digit in their name under cmd?

se for qualquer coisa baseada nt (mais especificamente W2k mais ) sim, isso pode ser feito. O truque é usar findstr , que suporta regexes simples, para filtrar os resultados.
dir /b |findstr /r "\.[0-9]" fornecerá resultados semelhantes aos que dir do seu exemplo faria. Isso significa que ele também retornará file.1st.second (como dir).
Um pequeno problema aqui é que ele listará apenas nomes de arquivos, mas mesmo isso pode ser resolvido:
for /f %F in ('dir /b ^|findstr /r "\.[0-9]"') do @echo %~ftzaF imprimirá sua listagem bem formatada dir style. Note que tem que ser executado no diretório atual!

OR ( o que eu recomendaria )
se você tiver powershell disponível (ou estiver pronto para instalá-lo), ative-o e execute: gi .\* |? {$_.name -match "\.[0-9]"}

Editado de acordo com o comentário do OP:

Isso irá enumerar arquivos usando for /r :
Mais simples, mas muito lento (praticamente inutilizável para qualquer coisa, exceto alguns arquivos), já que ele executa findstr para cada linha:

for /r "c:\temp" %F in (*) do @echo %~nxF | findstr /r "\.[0-9]" && echo %F

Mais complexo, mas rápido (usa strings especialmente preparadas para permitir a união de uma única instância de findstr :

for /f "tokens=2 delims=* eol=*" %F in ('^(for /r "directory_root" %F in ^(*^) do @echo %~nxF*%~dpnxF^) ^|findstr /r "\.[0-9].*\*"') do @echo %F 

ou (funcionalmente o mesmo, mas mais fácil de ler: >)

(for /r "directory_root" %F in (*) do @echo %~nxF*%~dpnxF) | for /f "tokens=2 delims=* eol=*" %F in ('findstr /r "\.[0-9].*\*"') do @echo %F

Todos os exemplos são executados diretamente na linha de comando

    
por 19.10.2012 / 19:09