So zeigen Sie den Dateipfad nicht mit dem Befehl dir / b / s in der Batchdatei an

641
Mark Deven

Gibt es eine Möglichkeit, die Anzeige von Dateipfaden zu umgehen, wenn der dir /b /sBefehl in einer Datei verwendet wird?
Momentan gibt es beim Ausführen dir /b /s C:\WinPE_amd64 >dir.txtso etwas aus:

C:\WinPE_amd64\file.txt C:\WinPE_amd64\secondfile.txt C:\WinPE_amd64\Folder\AnotherFile.txt 

Was ich will ist so etwas:

file.txt secondfile.txt AnotherFile.txt 
1
Lassen Sie das `/ S` aus. ** Wenn ** Dateien in gleichnamigen Unterverzeichnissen vorhanden sind. Wie würden Sie sie unterscheiden? Anderenfalls parse dir die Ausgabe mit einem `for / f` und verwende den Modifizierer` ~ nx`, um nur name + extension `für / f" delims = "% A in ('dir / B / S" C: \ WinPE_amd64 "') zurückzugeben. do @ Echo =% ~ nxA` LotPings vor 6 Jahren 0
Mein Dir-Befehl muss sie nicht unterscheiden, da ich dann neue und alte Dateien sortiere. Das ist perfekt, danke. Vielleicht poste das als Antwort, damit du Kredit bekommst Mark Deven vor 6 Jahren 0

1 Antwort auf die Frage

2
LotPings

Analysieren Sie die Ausgabe mit a for /fund verwenden Sie den ~nxModifikator, um nur name + extension zurückzugeben

In der cmd-Zeile:

(for /f "delims=" %A in ('dir /B/S "C:\WinPE_amd64"') do @Echo=%~nxA)>dir.txt 

Verdoppeln Sie in einer Charge das Prozentzeichen von for für Metavariable

@Echo off ( for /f "delims=" %%A in ('dir /B/S "C:\WinPE_amd64"') do Echo=%%~nxA ) >dir.txt 

Es geht darum, Präferenzen zu formatieren (oder zu lange Zeilen zu vermeiden)

@Echo off ( for /f "delims=" %%A in ( 'dir /B/S "C:\WinPE_amd64"' ) do Echo=%%~nxA ) >dir.txt 

BEARBEITEN eine möglicherweise schnellere Alternative ist a for /r

(For /r "C:\WinPE_amd64" %A in (*) Do @Echo=%~nxA)>dir.txt 

Eine andere Alternative, die einen Powershell-Befehl einhüllt

powershell -nop -c "(dir 'C:\WinPE_amd64' -r -file).Name" >dir.txt 
Das einzige Problem ist, dass dies ein sehr langsames Skript für ein DIR mit 2.000 Zeilen ist. Mark Deven vor 6 Jahren 0
immer noch, wahrscheinlich die besten kranken von einer Charge Mark Deven vor 6 Jahren 0
Beim Parsen mit "for / f" wird eine zweite Instanz von cmd.exe verwendet. Ich füge einen anderen Weg zur Antwort hinzu LotPings vor 6 Jahren 0
Aha danke, im Zweifelsfall Power Shell verwenden. Mark Deven vor 6 Jahren 0