Frage

Wenn ich über jede Datei bin Iterieren mit:

@echo off

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

Wie kann ich drucke die Erweiterung jeder Datei? Ich habe versucht, die Zuordnung %% f zu einer temporären Variablen und dann den Code verwendet:. echo "%t:~-3%" zu drucken, aber ohne Erfolg

War es hilfreich?

Lösung

Der FOR-Befehl hat mehrere eingebaute Schalter, die Ihnen erlauben Dateinamen zu ändern. Versuchen Sie wie folgt vor:

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

Für weitere Details Verwendung help for eine vollständige Liste der Modifikatoren zu bekommen - es gibt durchaus ein paar

Andere Tipps

Das funktioniert, obwohl es nicht blendend schnell ist:

@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

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

Sie set keine Variable innerhalb der () der eines for und erwarten, dass es sofort zu verwenden, es sei denn, Sie vorher ausgegebenen

setlocal ENABLEDELAYEDEXPANSION

und Sie verwenden ! statt% der Variablennamen zu wickeln. Zum Beispiel

@echo off
setlocal ENABLEDELAYEDEXPANSION

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

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

)

Überprüfen Sie heraus

set /?

für weitere Informationen.

Die andere Alternative ist ein Unterprogramm rufen Sie die set, wie Pax zeigt zu tun.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top