Удалить расширения файлов с помощью «echo match extension» в пакетном скрипте?

Удалить расширения файлов с помощью «echo match extension» в пакетном скрипте?

У меня есть этот пакетный скрипт:

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

Мне нужно «эхо», если есть совпадение с каким-либо из расширений.

Например, если есть файл с именем test.pdfи поскольку он совпадает с расширением *.pdf, то я хотел бы вывести эхо match pdfв выходных данных (если совпадений нет, то ничего не показывать).

Как мне это сделать?

решение1

Я большой поклонник функционального пакетного программирования.

Мое решение может оказаться неряшливым, поскольку я почти не спал, но я могу вас заверить, что оно работает и делает более или менее то, о чем вы просите.

Это, возможно, самый неэффективный способ сделать это, но если бы я написал пакет для обработки всех расширений в каждом каталоге, отслеживание, если бы я вам о них рассказал, стало бы немного сложнее, но выполнение было бы быстрее.

Кроме того, функции можно было бы сократить до минимума, если бы я не использовал переменные, чтобы вы могли следить за происходящим.

@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

Связанный контент