Befehlszeilenlistendateien in Unterordnern, aber nicht im aktuellen Ordner

1

Ich habe eine Batch-Datei, 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 verwendet wird.

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 sich direkt in c: \ temp befindet, daher wären meine gewünschten Ergebnisse:

c:\temp\012015\blah_012340.doc
c:\temp\032016\blah_124756.doc
c:\temp\042016\blah_125230.doc
c:\temp\052016\blah_052647.doc
Jose
quelle
Warum verwenden Sie nicht tree /ffür eine bessere visuelle Qualität?
Ich bin kein Experte für PowerShell, aber ich denke, Sie können dies problemlos mit PowerShell tun, indem Sie (alias) -includeund -excludewechseln dir.
Ich glaube nicht, dass der Baum funktioniert, da ich die Liste in eine Liste schreiben muss, die ich dann für meine nächste Funktion in der Batch-Datei verwende. Powershell mag funktionieren, aber ich kenne Powershell auch nicht. Ich denke, ich kann versuchen, einige Beispiele zu finden, die funktionieren könnten, und von dort aus weitergehen.
Jose

Antworten:

0

das sollte funktionieren

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

Hier ist die Aufteilung für diesen einen Liner.

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

"delims="Setzt die Begrenzer auf keine, sodass jede Zeile als einzelne Phrase behandelt wird. Standardmäßig werden Leerzeichen als Trennzeichen behandelt.

%5 ist die Variable.

in ('dir /a:d /b') Dies ruft die Liste der Verzeichnisse des Zielordners ab.

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

Bitte beachten Sie, dass Sie, wenn Sie dies von einer Batchdatei ausführen, verwenden müssen %%5

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

Hoffe das hilft.

Danke

Zalmy
quelle
Sieht so aus, als würde das funktionieren, sobald ich herausgefunden habe, was ich vermassle. Ich bin mir nicht sicher, ob das %5etwas war, das ich ändern soll, also habe ich es so gelassen, wie es ist. Ich habe den von Ihnen aufgelisteten Code zu meinem Stapel hinzugefügt. Die ausgegebenen Ergebnisse schlossen die Dateien aus, die sich in dem von mir durchsuchten Stammverzeichnis befanden. Es wurde jedoch nur ein Unterverzeichnis aufgelistet, und in diesem Test gab es 3 Unterverzeichnisse. Im Moment lautet der relevante Teil meines Skripts wie folgt: cd "c: \ temp" für / f "delims =" %% 5 in ('dir / a: d / b') do dir / b / s "%% 5">% list%
Jose
Da es sich also um unterschiedliche Befehle handelt, muss man diese verwenden >>. in Ihrem Fall for /f "delims=" %%5 in ('dir /a:d /b') do dir /b /s "%%5">>%list%
Zalmy