Befehlszeilen-Listendateien in Unterordnern, jedoch nicht im aktuellen Ordner

688
Jose

Ich habe eine Batchdatei, die mir eine Verzeichnisliste aller Dateien in aktuellen und Unterordnern gibt. Ich möchte dies ändern, um alle Dateien aufzulisten, die sich in Unterordnern befinden, aber NICHT im aktuellen Ordner. Derzeit verwende ich diesen Befehl, der erfolgreich zum Auflisten aller Dateien im aktuellen Ordner UND in den Unterordnern funktioniert.

cd "c:\temp" dir /s/b *.doc>c:\temp\mylist.txt 

Dies führt zu folgenden Ergebnissen:

c:\temp\test8.doc c:\temp\test9 (2).doc c:\temp\test9.doc c:\temp\012015\blah_012340.doc c:\temp\032016\blah_124756.doc c:\temp\042016\blah_125230.doc c:\temp\052016\blah_052647.doc 

Ich möchte, dass meine Ergebnisse nicht zeigen, was direkt in c: \ temp liegt. Meine gewünschten Ergebnisse wären also:

c:\temp\012015\blah_012340.doc c:\temp\032016\blah_124756.doc c:\temp\042016\blah_125230.doc c:\temp\052016\blah_052647.doc 
1
Warum verwenden Sie nicht "tree / f" für eine bessere visuelle Qualität? w17t vor 7 Jahren 0
Ich bin kein Experte für PowerShell, aber ich denke, Sie können dies problemlos mit PowerShell tun, indem Sie -include und -exclude-Schalter von 'dir' (Alias) verwenden. w17t vor 7 Jahren 0
Ich glaube nicht, dass der Baum funktionieren wird, da ich die Liste in eine Liste laden muss, die ich dann für meine nächste Funktion in der Batchdatei verwende. Powershell mag funktionieren, aber ich kenne auch keine Powershell. Ich denke, ich kann versuchen, einige Beispiele zu finden, die funktionieren könnten und von dort ausgehen. Jose vor 7 Jahren 0

1 Antwort auf die Frage

0
Zalmy

das sollte funktionieren

for /f "delims=" %5 in ('dir /a:d /b') do dir /b /s "%5" 

Hier ist die Aufschlüsselung für diesen einen Liner.

for /f wird verwendet, um eine Liste von Elementen zu wiederholen.

"delims="setzt die Trennzeichen auf none, sodass jede Zeile als einzelne Phrase behandelt wird. Leerzeichen werden standardmäßig als Trennzeichen behandelt.

%5 ist die Variable.

in ('dir /a:d /b') Dadurch wird die Liste der Verzeichnisse des Zielordners abgerufen.

do dir /b /s "%5"Hier definieren Sie Ihre Aktion, dogefolgt vom Befehl und der Variablen %5als Argument.

Bitte beachten Sie, dass Sie diese Datei verwenden müssen, wenn Sie sie aus einer Batchdatei ausführen %%5

for /f "delims=" %%5 in ('dir /a:d /b') do dir /b /s "%%5"

Hoffe das hilft.

Vielen Dank

Sieht aus, als würde das funktionieren, sobald ich herausgefunden habe, was ich vermasselte. Ich bin mir nicht sicher, ob es sich bei '% 5' um etwas handelt, das ich ändern sollte. Ich habe den von Ihnen aufgelisteten Code zu meinem Stapel hinzugefügt. Die Ergebnisse, die es ausgegeben hat, schließen die Dateien aus, die sich in dem "root" -Verzeichnis befanden, das ich suche. Es hat jedoch nur ein Unterverzeichnis aufgelistet, und in diesem Test gab es drei Unterverzeichnisse. Der aktuelle Teil meines Skripts liest sich wie folgt: cd "c: \ temp" für / f "delims =" %% 5 in ('dir / a: d / b') do dir / b / s "%% 5">% list% Jose vor 7 Jahren 0
Da es sich um unterschiedliche Befehle handelt, müssen Sie also `>>` verwenden. in Ihrem Fall `for / f" delims = "%% 5 in ('dir / a: d / b') do dir / b / s" %% 5 ">>% list%` Zalmy vor 7 Jahren 0