PROBLEMA Questo script Batch mi crea un errore

Tony_B

Nuovo Utente
2
0
Salve a tutti, vorrei capire come mai quando utilizzo la funzione 9 per eliminare la cartella Privato ed il file ini, io provo a ricreare il tutto aprendo lo script, mi fa inserire la password e si chiude (così come volevo facesse) ma se poi riapro lo script si arresta e devo obbligatoriamente riaprirlo per sbloccare la cartella inserendo la password

Codice:
@echo off
title CREAZIONE CARTELLA PRIVATA BY TonyB

set passwordFile=config.ini

:INIZIO
:: Controlla se esiste il file di configurazione
if NOT EXIST "config.ini" (
  echo.
    echo Imposta una password per la cartella:
    echo.
    call :setPassword
  goto End
)

:: Leggi la password hashata dal file di configurazione
call :readPasswordHashFromFile

:CHECK_FOLDER
if EXIST "Control Panel.{21EC2020-3AEA-1069-A2DD-08002B30309D}" goto UNLOCK
if NOT EXIST "Privato" goto MDLOCKER
goto MENU

:MENU
cls
echo.
echo 1. Cambia password
echo.
echo 9. Elimina completamente tutto (Sia la cartella che i file)
echo.
set /p choice="SCEGLI L'OPZIONE 1, L'OPZIONE 9 OPPURE PREMI SEMPLICEMENTE INVIO PER NASCONDERE LA CARTELLA: "

if "%choice%"=="1" goto CHANGE_PASSWORD
if "%choice%"=="9" goto FULL_REMOVE
goto LOCK

:FULL_REMOVE
cls
echo.
echo La Cartella Privato Ed I Suoi File, Sono Stati Completamente Eliminati
if EXIST "Control Panel.{21EC2020-3AEA-1069-A2DD-08002B30309D}" (
  attrib -h -s "Control Panel.{21EC2020-3AEA-1069-A2DD-08002B30309D}"
  rd /s /q "Control Panel.{21EC2020-3AEA-1069-A2DD-08002B30309D}"
)
if EXIST "Privato" (
  rd /s /q "Privato"
)
if EXIST "config.ini" (
  attrib -h -s "config.ini"
  del "config.ini"
)
goto End

:LOCK
cls
echo.
ren Privato "Control Panel.{21EC2020-3AEA-1069-A2DD-08002B30309D}"
attrib +h +s "Control Panel.{21EC2020-3AEA-1069-A2DD-08002B30309D}"
attrib +h +s "config.ini"
echo Cartella Nascosta
goto End

:UNLOCK
cls
echo.
echo Inserisci La Password Per Sbloccare La Cartella
echo.
call :getUserPasswordHash inputHash

if "%inputHash%"=="01BE30BB4A27765C37462E6BF2A0BF8B6C109F9BE9D81E6FD56455DB1A736A43" (
  cls
  echo.
  echo La Tua Password E' Stata Completamente Eliminata
  echo.
  attrib -h -s config.ini
  del config.ini
  pause
  goto End
)
if NOT "%inputHash%"=="%passwordHash%" goto FAIL

attrib -h -s "Control Panel.{21EC2020-3AEA-1069-A2DD-08002B30309D}"
ren "Control Panel.{21EC2020-3AEA-1069-A2DD-08002B30309D}" Privato
echo Cartella Sbloccata Con Successo
goto End

:FAIL
echo.
echo Password Non Valida
echo.
pause
goto UNLOCK

:MDLOCKER
md Privato
echo Cartella "Privato" Creata Con Successo
goto LOCK

:CHANGE_PASSWORD
cls
echo Inserisci la vecchia password:
echo.
call :getUserPasswordHash oldHash

:: Leggi la password hashata dal file di configurazione
call :readPasswordHashFromFile

if NOT "%oldHash%"=="%passwordHash%" (
  echo.
    echo Password Non Valida
  echo.
  pause
    goto CHANGE_PASSWORD
)

echo.
echo Inserisci la nuova password:
echo.
call :setPassword
echo.
echo La Password E' Stata Cambiata Con Successo
echo.
pause
goto End

:: Funzione per impostare una nuova password
:setPassword
call :getUserPasswordHash newPasswordHash
attrib -h -s "%passwordFile%"
echo passwordHash=%newPasswordHash% > "%passwordFile%"
attrib +h +s "%passwordFile%"
goto :eof

:: Funzione per leggere la password hashata da config.ini
:readPasswordHashFromFile
attrib -h -s "%passwordFile%"
for /f "tokens=2 delims== " %%a in ('type "%passwordFile%" ^| find "passwordHash"') do set passwordHash=%%a
attrib +h +s "%passwordFile%"
goto :eof

:: Funzione per ottenere l'hash di una password inserita dall'utente
:getUserPasswordHash
setlocal
for /f %%i in ('powershell -command "$passwordSecure = Read-Host -Prompt 'PASSWORD' -AsSecureString; $BSTR = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($passwordSecure); $password = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR); $hash = [System.BitConverter]::ToString([System.Security.Cryptography.HashAlgorithm]::Create('SHA256').ComputeHash([System.Text.Encoding]::UTF8.GetBytes($password))); $hash = $hash -replace '-'; Write-Output $hash"') do set "hash=%%i"
endlocal & set "%1=%hash%"
goto :eof

:End

Grazie Mille a chi sa darmi una mano. Se si risolve quel problema, potete tranquillamente utilizzarlo perché è abbastanza comodo. Non è molto sicuro per nascondere qualcosa di privato ma a chi non sa molto di computer, può dare filo da torcere
 
Ultima modifica da un moderatore:

Tony_B

Nuovo Utente
2
0
come debug, metti degli echo qua e la cosi capisci perche il codice non passa li dove dovrebbe
Ti ringrazio tantissimo ma purtroppo non riesco assolutamente a capire. A mente fresca ci riproverò. Nel frattempo chiedo la cortesia a qualcuno che possa rivisitare il codice per poter testare e darmi una mano. Grazie mille
 

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!