2009-07-08 5 views
32

ich folgend habe in einer Batch-Datei For-Schleife:Erhalten Dateinamen im Batch-for-Schleife

for /R c:\test\src %%i IN (*.*) DO (
MOVE %%i C:\test\destination 
ECHO %%i 
exit 
) 

Das Ergebnis des ECHOS gibt den gesamten Dateipfad Ex: C: \ Ordnernamen \ Dateiname Ich brauche zu ECHO nur die Dateiname. Gibt es einen bestimmten Befehl, der mir den Dateinamen geben würde? Danke!

+6

BTW, wenn Sie eine Version von Windows in diesem Jahrhundert gemacht werden, ist es nicht DOS, das Sie verwenden, ist es die Windows-Eingabeaufforderung. – whatsisname

Antwort

65

Wenn Befehlserweiterungen aktiviert sind (Windows XP und neuer, ungefähr), können Sie die Syntax% ~ nF (wobei F die Variable und ~ n die Anforderung für den Namen ist) verwenden, um nur den Dateinamen abzurufen.

FOR /R C:\Directory %F in (*.*) do echo %~nF 

sollte nur die Dateinamen wiedergeben.

+13

fügen Sie% ~ xF am Ende hinzu, wenn Sie auch die Dateiendung sehen wollen. – akf

+33

Oder% ~ nxf, um Dateinamen mit Erweiterungen zu erhalten. – Helen

+0

IIRC, die meisten der Erweiterungen wurden in CMD.EXE seit mindestens NT 3.5, und einige von ihnen waren sogar in den Pre-GUI Beta-Versionen von NT. Das NT-Team sah keinen Grund, den ganzen Schmerz von COMMAND.COM beim Erstellen einer "neuen" Version von Windows zu bewahren. Sie schienen sich jedoch lange Zeit nicht darum bemüht zu haben, dem Dokumentationsteam davon zu erzählen. – RBerteig

4

oder Nur% ~ F gibt Ihnen den vollständigen Pfad und vollständigen Dateinamen.

Zum Beispiel, wenn Sie alle mit * .ax Dateien im aktuellen Verzeichnis registrieren möchten ....

FOR /R C:. %F in (*.ax) do regsvr32 "%~F" 

Das funktioniert ganz gut in Win7 (64bit) :-)

3

Ich bin ein wenig spät, aber ich habe das verwendet:

dann können Sie eine einfache FOR-Schleife, um den Dateinamen zu extrahieren und sie verwenden. z:

for /f "tokens=* delims= " %%a in (dir_file.txt) do (
gawk -f awk_script_file.awk %%a 
) 

oder speichern sie in Vars für den späteren Gebrauch (!! N1 !, N2 .. Nn!). zB:

set /a N=0 
for /f "tokens=* delims= " %%a in (dir_file.txt) do (
set /a N+=1 
set v[!N!]=%%a 
) 
+0

gawk ist jedoch nicht überall verfügbar – Li3ro

0

Wenn Sie sowohl Dateinamen (nur) und Erweiterung bleiben möchten, können Sie verwenden %~nxF:

FOR /R C:\Directory %F in (*.*) do echo %~nxF