2008-09-26 8 views
17

Wenn ich über jede Datei bin Iterieren mit:Batch Fund Dateierweiterung

@echo off 

FOR %%f IN (*\*.\**) DO (
    echo %%f 
) 

wie konnte ich die Erweiterung jeder Datei drucken? Ich habe versucht, %% f zu einer temporären Variable zuzuweisen und dann den Code: echo "%t:~-3%" zu drucken, aber ohne Erfolg.

Antwort

32

Der Befehl FOR verfügt über mehrere integrierte Schalter, mit denen Sie Dateinamen ändern können. Versuchen Sie Folgendes:

@echo off 
for %%i in (*.*) do echo "%%~xi" 

Für weitere Details verwenden help for eine vollständige Liste der Modifikatoren zu bekommen - es gibt nicht wenige!

5

Dies funktioniert, obwohl es nicht unglaublich schnell:

@echo off 
for %%f in (*.*) do call :procfile %%f 
goto :eof 

:procfile 
    set fname=%1 
    set ename= 
:loop1 
    if "%fname%"=="" (
     set ename= 
     goto :exit1 
    ) 
    if not "%fname:~-1%"=="." (
     set ename=%fname:~-1%%ename% 
     set fname=%fname:~0,-1% 
     goto :loop1 
    ) 
:exit1 
    echo.%ename% 
    goto :eof 
2

Sam ‚s Antwort ist definitiv die einfachste für das, was Sie wollen. Aber ich wollte noch hinzufügen:

Nicht set eine Variable innerhalb der () ‚s eines for und erwarten, dass es sofort zu verwenden, es sei denn, Sie vorher

ausgegeben haben
setlocal ENABLEDELAYEDEXPANSION 

und Sie verwenden ! statt von%, um den Variablennamen zu umbrechen. Zum Beispiel

@echo off 
setlocal ENABLEDELAYEDEXPANSION 

FOR %%f IN (*.*) DO (

    set t=%%f 
    echo !t:~-3! 

) 

Check out

set /? 

für weitere Informationen.

Die andere Alternative ist, ein Unterprogramm aufzurufen, um die set, wie Pax zeigt.