Batch-Datei zum Anzeigen einer Verzeichnisliste mit Ausnahme von Verzeichnissen, die mit dem Unterstrich "_" beginnen

0

Ich werfe eine Batch-Datei zusammen, die eine Liste aller Verzeichnisse in einem bestimmten Pfad ausgibt.

Ich habe einige Ordner im W:/wamp/www/Verzeichnis, die mit einem Unterstrich beginnen _. zum beispiel _templates.

Ich möchte, dass das Ergebnis alle Ordner ausschließt, die mit einem beginnen _. Ich brauche diese Anstrengung nicht, um rekursiv zu sein.

Mein aktuelles Verzeichnis für w:/wamp/www/sieht also so aus:

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

Gewünschte Echoausgabe ist:

  • Folder1
  • Folder2
  • Folder3

Ich kann eine Auflistung mit einer Anzahl von erhalten, die das Folgende verwendet, aber es wirft natürlich alle Ordner auf mich zurück. Ich würde mich über jede Unterstützung freuen. Ich brauche die Zahlen in dieser Liste nicht wirklich. Wenn es also einen eleganteren Ansatz gibt, wäre ich dankbar für die Einsicht

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
)
Jeffrey S.
quelle
Warum markieren Sie sie nicht als versteckt? Sie sehen nicht wie die Art von Namen aus, die dynamisch erscheinen und verschwinden. Geben Sie einfach ein attrib +h w:/wamp/www/_*, und die Dateien werden dann aus den Verzeichnislisten ausgeschlossen.
AFH
dir hat keine Ausschlussoption, aber dies ist relevant stackoverflow.com/questions/15714363/…
Barlop

Antworten:

1

Sie können den Unterstrich irgendwo in Ihrer FOR-Schleife testen.

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

Diese Seite enthält einige gute Tipps zur String-Manipulation in CMD. http://www.dostips.com/DtTipsStringManipulation.php

GuitarPicker
quelle
1

Wenn Sie nur die Auflistung benötigen, könnte der vollständige Code sein

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

Verwenden Sie findstrdiese Option, um die Liste zu filtern und nur die Zeilen abzurufen, die /vam Anfang der Zeile keinen /bUnterstrich ( ) enthalten

MC ND
quelle
0

Wenn dieses System mindestens Windows 7 / Server 2008 R2 ist, können Sie den folgenden Befehl interaktiv in Powershell ausführen:

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

Es wird dringend empfohlen, alle Teile zusammen zu verschrotten und zu Powershell zu wechseln. Es ist der Nachfolger von cmd (der in Zukunft veraltet sein wird) und aufgrund seiner Objektorientierung wesentlich leistungsfähiger.

Der Befehl ruft alles im Verzeichnis www ab, das nicht mit '_' beginnt, und übergibt dann nur Verzeichnisse in der Pipeline an den Befehl select, der das Namensattribut der Verzeichnisse zurückgibt.

Lassen Sie mich wissen, ob Sie dies automatisieren müssen oder ob dies ausreicht.

Megamorf
quelle