You have a batch script, but it’s not perfect. You need it to delete everything except the specified paths, but it currently deletes everything. How can it be modified to delete everything except what’s specified in the keys?
@echo off
chcp 1251
:: Declaration of the ‘tree’ structure with keys specifying which folders not to enter
setlocal enabledelayedexpansion
set “tree[E:][STEAM]=null”
set “tree[E:][System Volume Information]=null”
set “tree[E:][STEAM][bin]=null”
set “tree[E:][STEAM][clientui]=null”
set “tree[E:][STEAM][config]=null”
set “tree[E:][STEAM][controller_base]=null”
set “tree[E:][STEAM][friends]=null”
set “tree[E:][STEAM][graphics]=null”
set “tree[E:][STEAM][logs]=null”
set “tree[E:][STEAM][package]=null”
set “tree[E:][STEAM][public]=null”
set “tree[E:][STEAM][resource]=null”
set “tree[E:][STEAM][servers]=null”
set “tree[E:][STEAM][steam]=null”
set “tree[E:][STEAM][steamui]=null”
set “tree[E:][STEAM][tenfoot]=null”
set “tree[E:][STEAM][steamapps][common][Counter-Strike Global Offensive]=null”
set “tree[E:][STEAM][steamapps][common][dota 2 beta]=null”
:: Function to delete folders that do not match the ‘tree’ structure
:deleteNonTreeFolders
set “basePath=%~1”
for /f “tokens=*” %%A in (‘dir /b /ad “%basePath%”’) do (
set “folder=%basePath%%%A”
if defined tree[%basePath%][%%A] (
if “!tree[%basePath%][%%A]!”==“null” (
echo Not entering folder: “!folder!”
) else (
call :deleteNonTreeFolders “!folder!”
)
) else (
echo Deleting folder: “!folder!”
rd /s /q “!folder!”
)
)
exit /b
:: Calling the function with the root directory
call :deleteNonTreeFolders “E:”
endlocal