Batch-Fund-Dateierweiterung
-
02-07-2019 - |
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
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.