2010-11-25 9 views
1

Kurz Globbing möchte ich mag Port diese bash Ausdruck in eine Windows-Batch-Datei:Windows-Batch-Dateinamen

echo {foo,bar,baz}/*.{agent,event,plan}

Derzeit verwende ich echo foo/*.agent foo/*.event foo/*.plan bar/*.agent etc... aber als die Anzahl der Verzeichnisse wachsen und einige neue Erweiterungen verwendet werden, es wird sehr ermüdend, diese Linie zu modifizieren.

Antwort

0

eine pro Zeile (nicht sicher, ob das ok ist):

@echo off 
for %%A in (foo,bar,baz) do (
for %%B in (agent,event,plan) do echo %%A/*.%%B 
) 

Für alle in einer Zeile, müssen Sie wahrscheinlich einen Hack:

@echo off 
SETLOCAL ENABLEEXTENSIONS 
for %%A in (foo,bar,baz) do (
for %%B in (agent,event,plan) do (SET /P "dummy=%%A/*.%%B ") < NUL 
) 
echo. 

Treat als eine Liste von Dateien und Ordnern (wird nur vorhandene Dateien drucken):

@echo off 
SETLOCAL ENABLEEXTENSIONS 
for %%A in (foo,bar,baz) do (
    for %%B in (agent,event,plan) do (
     for %%C in (%%A/*.%%B) do (SET /P "dummy=%%A/%%~nxC ") < NUL 
    ) 
) 
echo. 
+0

Sorry, brauchen alle Argumente in einer Zeile. – ext

+0

@ext Leider gibt es keine echte Array/List-Unterstützung in Windows Echo. Gibt es keine Möglichkeit, die Eingabe pro Zeile zu akzeptieren? Alles andere wird ein Hack sein ... – Anders

+0

@Anders Leider nein, Argumente werden einem (proprietären) Parser zugeführt, der über alle Dateien Bescheid wissen muss, um Abhängigkeiten aufzulösen. Aber ich denke, der Hack ist in Ordnung, besser, als die Zeile jedes Mal manuell zu ändern, was zeitraubend und fehleranfällig ist. – ext