2017-03-12 4 views
0

Derzeit bin ich Iterieren alle Dateien in einem Ordner zur Zeit bin ich in Sample Ordner und ich tue es wie folgt aus:Iterate Ordnername in Batch-Dateien

@echo off 

for /R %%a in ("*") do (
@echo %%a 
) 

pause 

Und es listet die Dateien wie folgt aus:

C:\Users\-----\Desktop\Sample\mybat.bat 
C:\Users\-----\Desktop\Sample\bin\1.dll 
C:\Users\-----\Desktop\Sample\content\themes\2.css 

Was ich will, ist den Namen aufzulisten, aber ausgehend von aktuellen Ordner, wo ich die .bat Datei, ich. E., Sollte es so aussehen:

Sample\mybat.bat 
Sample\bin\1.dll 
Sample\content\themes\2.css 
+0

Verändern Sie jeden vollständigen Pfad, der in der Schleife zurückgegeben wird, indem Sie die% CD% -Variable von Anfang an entfernen. – Compo

+0

Ein einfaches 'dir/B/S/A-D' wird Ihnen die gleiche Ausgabe liefern. Compos-Vorschlag erfordert String-Substitution und in einem (Codeblock) auch verzögerte Expansion. – LotPings

+0

Mein Fehler @LotPings dann dachte ich, dass die Verwendung von ** '/ S' ** bedeutete, dass der vollständige Pfad zurückgegeben wurde, kein relativer. – Compo

Antwort

0

Ein schöner Weg, um eine Liste der Dateien relativ aus dem aktuellen Verzeichnis zurückzukehren xcopy /L verwenden:

pushd "%~dp0.." 
xcopy /L /S /I ".\Sample" "%TEMP%" | find ".\" 
popd 

Um eine Schleife durch alle der zurück Artikel, verwenden:

pushd "%~dp0.." 
for /F "delims=" %%F in (' 
    xcopy /L /S /I ".\Sample" "%TEMP%" ^| find ".\" 
') do (
    echo(%%F 
) 
popd 

die .\ Präfix zu entfernen, verwenden Sie die folgende:

pushd "%~dp0.." 
for /F "tokens=1* delims=\" %%E in (' 
    xcopy /L /S /I ".\Sample" "%TEMP%" ^| find ".\" 
') do (
    echo(%%F 
) 
popd