@echo off
setlocal enableextensions disabledelayedexpansion
chcp 1252
set task=none
:startup
cls
echo ==========================================================================
echo === 40tude Dialog: Bereinigung der Gruppen-Konfigurationsinformationen ===
echo === D.h.: Nicht erforderliche *.ini-Dateien werden in *.del umbenannt. ===
::   === Autor:  Bernd Rose                                                 ===
::   === Status: Public Domain                                              ===
::   === Quelle: www.barghahn-online.de/4td_faq/backup.html#clean_ini       ===
set      Version=2020-10-12
echo ================================================== Version: %Version% ===
echo.
if [%task%] neq [del] goto next
echo Bereinigung beendet. (%cnt_var% Dateien zum Löschen vorbereitet.)
echo.
endlocal
goto choose
:next
if [%task%] neq [recov] goto hints
echo Vorgang beendet. (%cnt_var% Dateien wiederhergestellt.)
echo.
goto choose
:hints
echo Hinweise:
echo 1. Das Skript %~nx0 muss im Hauptverzeichnis von 40tude Dialog liegen.
echo 2. Zum Start des Skriptes z.B. im Explorer auf %~nx0 doppelklicken.
echo 3. Das Skript ermöglicht sowohl Löschvorbereitung (*.ini -^> *.del) als auch
echo    (möglichst zeitnah durchzuführendes!) Wiederherstellen (*.del -^> *.ini).
echo 4. Vorhandene Dateien werden jeweils ohne Nachfrage überschrieben!
echo 5. Einstellungen für alle nicht-abonnierten Newsgruppen gehen verloren, sofern
echo    diese nicht wenigstens eine gelöschte oder ungelöschte Nachricht enthalten.
echo 6. Der 40tude-Dialog-Befehl "Datenbank komprimieren" überspringt *.del-Dateien.
echo    Statt alle *.del-Dateien manuell aus dem Dialog-Unterverzeichnis data zu 
echo    löschen, kann somit auch einfach die Datenbank komprimiert werden.
echo 7. Niemals *.del-Dateien aus einer Komprimierungs-Sicherung zurückspielen!
echo    (Beim Komprimieren ändern sich die Gruppennummern.)
echo.
tasklist | find /i "dialog.exe">nul
if errorlevel 1 goto dir_chk
echo Abbruch: 40tude Dialog muss bei diesem Vorgang geschlossen sein!
goto exit
:dir_chk
if exist "%~dp0Dialog.exe" (if exist "%~dp0data\." goto ok)
echo Abbruch: Dialog.exe oder Unterverzeichnis data fehlen im aktuellen Verzeichnis.
echo Das Skript muss aus dem Programmverzeichnis von 40tude Dialog gestartet werden.
goto exit
:ok
cd data
:choose
echo Folgende Optionen stehen zur Auswahl: (Fortsetzen auf eigenes Risiko!!)
echo    [L]öschvorbereitung (*.ini -^> *.del; überschreibt *.del ohne Nachfrage)
echo    [W]iederherstellen  (*.del -^> *.ini; überschreibt *.ini ohne Nachfrage)
echo    [B]eenden
echo.
choice /c:lwb /n /m "Bitte wählen:"
if errorlevel 3 goto finalexit
if errorlevel 2 goto recover
if exist groups_sub.lst del groups_sub.lst
certutil -encodehex groups_sub.idx groups_sub.hex 4 >nul
setlocal enabledelayedexpansion
for /f "tokens=1-16 delims= " %%a in (groups_sub.hex) do (
  set /a tmp_val=0x00%%d%%c%%b%%a & @echo !tmp_val!>> groups_sub.lst
  set /a tmp_val=0x00%%h%%g%%f%%e & @echo !tmp_val!>> groups_sub.lst
  set /a tmp_val=0x00%%l%%k%%j%%i & @echo !tmp_val!>> groups_sub.lst
  set /a tmp_val=0x00%%p%%o%%n%%m & @echo !tmp_val!>> groups_sub.lst
  )
if exist groups_sub.hex del groups_sub.hex
if not exist groups_sub.lst (
  echo Abbruch^: Die Gruppenliste von 40tude Dialog konnte nicht konvertiert werden.
  echo Möglicherweise ist certutil.exe für den angemeldeten Nutzer nicht verfügbar.
  goto exit
  )
set /a cnt_var=0
for %%f in (*.ini) do (
  if not exist %%~nf.dat (
    if not "%%f" == "default.ini" (
      if %%~nf gtr 2 (
        findstr /x "%%~nf" groups_sub.lst>nul
        if !errorlevel! equ 0 (
          move /y %%f %%~nf.del>nul
          set /p %i=.<nul
          set /a cnt_var+=1
          )
        )
      )
    )
  )
set task=del
sleep 1
goto startup
:recover
set /a cnt_var=0
for %%f in (*.del) do (
  if not "%%f" == "default.del" (
    if %%~nf gtr 2 (
      if exist %%~nf.ini move /y %%~nf.ini %%~nf.sik>nul
      move /y %%f %%~nf.ini>nul
      set /p %i=.<nul
      set /a cnt_var+=1
      )
    )
  )
set task=recov
sleep 1
goto startup

:exit
echo.
pause
:finalexit