Arquivo em lote para mostrar uma lista de diretórios, exceto os diretórios que começam com sublinhado “_”

0

Eu estou jogando junto um arquivo de lote que ecoa uma lista de todos os diretórios em um caminho específico.

Eu tenho algumas pastas no diretório W:/wamp/www/ que começam com um underscore _ ; por exemplo, _templates .

Gostaria que o resultado excluísse todas as pastas que começam com _ . Eu não preciso desse esforço para ser recursivo.

Meu diretório atual para w:/wamp/www/ é assim:

  • _system
  • _templates
  • _assets
  • Folder1
  • Folder2
  • Folder3

A saída de eco desejada é:

  • Folder1
  • Folder2
  • Folder3

Eu posso obter uma listagem com uma contagem de números usando o seguinte, mas é claro que ela lança todas as pastas de volta para mim. Eu gostaria de receber ajuda. Eu realmente não preciso dos números nesta lista, então, se houver uma abordagem mais elegante, eu ficaria grato pelo insight

set acctDir=w:\wamp\www\
set app=setup.exe /cd
set log=w:\wamp\logs\projectlogs.txt


set c=0
For /f %%a in ('dir !acctDir! /B /A /D') do (
    set /a c+=1
    echo     !c!  %%a
    set dir!c!=%%a
    set projectname=%%a
)
    
por Jeffrey S. 09.04.2015 / 01:06

3 respostas

1

Você pode testar o sublinhado em algum lugar dentro do seu loop FOR.

SET FIRSTCHAR=%%a
SET FIRSTCHAR=!FIRSTCHAR:~0,1!
IF NOT "!FIRSTCHAR!"=="_" (do some stuff)

Este site tem algumas boas dicas sobre manipulação de strings no CMD. link

    
por 09.04.2015 / 02:16
1

Se tudo que você precisa é a listagem, o código completo pode ser

dir /a /b /d "w:\wamp\www" | findstr /v /b /c:"_"

Use findstr para filtrar a lista e recuperar apenas as linhas que não contêm ( /v ) no início da linha ( /b ) um sublinhado

    
por 09.04.2015 / 08:12
0

Se este sistema é pelo menos o Windows 7 / Server 2008 R2, então você pode executar o seguinte comando interativamente no Powershell:

Get-ChildItem -Exclude _* -Path w:\wamp\www\ | where{$_.mode -like "d*"} | select name

É aconselhável descartar todo o lote e passar para o Powershell. É o sucessor do cmd (que será obsoleto no futuro) e é muito mais capaz devido à sua orientação a objetos.

O comando recupera tudo no diretório www que não inicia com '_', depois passa apenas os diretórios pelo pipeline para o comando select que retorna o atributo name dos diretórios.

Deixe-me saber se você precisa automatizar isso ou se isso é suficiente.

    
por 10.04.2015 / 02:00