Dateierweiterungen mit „Echo Match Extension“ in einem Batch-Skript entfernen?

Dateierweiterungen mit „Echo Match Extension“ in einem Batch-Skript entfernen?

Ich habe dieses Batch-Skript:

set driveletter=F

call :delext "*.foo"
call :delext "*.bar"
call :delext "*.pdf"


:: funcion delext
@echo off
pause
goto:eof
:delext
  set delext=%1
  del /f/q/s %driveletter%:\"%delext%"
goto:eof

Was ich brauche, ist ein „Echo“, wenn eine Übereinstimmung mit einer der Erweiterungen vorliegt.

Wenn es beispielsweise eine Datei mit dem Namen gibt test.pdfund diese mit der Erweiterung übereinstimmt *.pdf, dann hätte ich gerne ein Echo match pdfin der Ausgabe (wenn es keine Übereinstimmung gibt, nichts anzeigen).

Wie kann ich das machen?

Antwort1

Ich bin ein großer Fan der funktionalen Batch-Programmierung.

Meine Lösung hier ist vielleicht eine ziemliche Sauerei, da ich bei weitem nicht genug geschlafen habe, aber ich kann Ihnen versichern, dass sie funktioniert und mehr oder weniger das tut, was Sie verlangen.

Dies ist möglicherweise die ineffizienteste Vorgehensweise, aber wenn ich die Stapelverarbeitung so geschrieben hätte, dass alle Erweiterungen pro Verzeichnis ausgeführt werden, wäre es zwar etwas komplizierter, den Überblick darüber zu behalten, ob ich Ihnen davon erzähle, aber die Ausführung wäre schneller.

Außerdem könnten die Funktionen auf sehr wenig Code reduziert werden, wenn ich keine Variablen verwenden würde, sodass Sie verfolgen könnten, was passiert.

@echo off

:: Set the starting path that we will be searching.
Set pathToSearch=C:\users\yo_mamma
cd /d "%pathToSearch%"
if not "%ERRORLEVEL%"=="0" echo Path %PathToSearch% not found&&exit /b 1


Set ExtensionsToCheck="*.foo" "*.txt" "*.bar" "*.pdf"
call :EnumerateExtensions %ExtensionsToCheck%
goto :EOF

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Function "EnumerateExtensions"
:EnumerateExtensions
if "%~1"=="" goto :EOF
Set fileMatchFound=FALSE
Set searchFileMask=%1
for /r %%p in ('.') do call :EnumerateDirectories "%%p" %searchFileMask%
shift
goto :EnumerateExtensions

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Function "EnumerateDirectories"
:EnumerateDirectories
Set directoryPath=%~DP1
Set fileMask=%~2
for %%f in (%fileMask%) do call :MatchFound "%directoryPath%" "%fileMask%" "%%f"
goto :EOF

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Function "MatchFound"
:MatchFound
if not "TRUE"=="%fileMatchFound%" echo ****** Mask match found:  %~2&&Set fileMatchFound=TRUE
:: echo del %~1%~3 <-- delete the found file here..
goto :EOF

verwandte Informationen