在批处理脚本中使用“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

相关内容