¿Eliminar extensiones de archivo con "extensión de coincidencia de eco" en un script por lotes?

¿Eliminar extensiones de archivo con "extensión de coincidencia de eco" en un script por lotes?

Tengo este script por lotes:

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

Lo que necesito es un "eco" si hay coincidencia con alguna de las extensiones.

Por ejemplo, si hay un archivo llamado test.pdfy dado que coincide con la extensión *.pdf, entonces me gustaría un eco match pdfen la salida (si no hay coincidencia, no muestra nada).

¿Cómo puedo hacer eso?

Respuesta1

Soy un gran fanático de la programación funcional por lotes.

Mi solución aquí podría ser un desastre ya que no he dormido CASI lo suficiente, pero puedo asegurarte que funciona y hace más o menos lo que estás pidiendo.

Esta es posiblemente la forma más ineficiente de hacerlo, pero si escribí el lote para hacer todas las extensiones por directorio, el seguimiento si les hablé de ellas se vuelve un poco más complicado pero sería una ejecución más rápida.

Además, las funciones podrían reducirse a muy poco código si no usara variables para que pudieras seguir lo que estaba sucediendo.

@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

información relacionada