Hola a todos, les explico mi problema, todos conocemos el código bat para crear una carpeta con contraseña, lo que nunca me ha gustado de ese código es que tienes que establecer la contraseña en el bat y si se lo pasas a alguien convertido en .exe no puede cambiar la contraseña, bueno yo modifique el código de forma que la primera vez que lo ejecutes tú creas en ese momento la contraseña.
cls
@echo off
title LOCKEDFOLDER.exe
color 0a
echo.
echo ==============================================================================
echo LOCKEDFOLDER [Version 2.0.0]
echo ------------------------------------------------------------------------------
echo.
if EXIST TWlock goto UNLOCK
if NOT EXIST LOCKEDFOLDER goto MDLOCKER
:CONFIRM
set /p op=Seguro que quieres proteger la carpeta? (S/N):
if %op%==S goto LOCK
if %op%==s goto LOCK
if %op%==n goto END
if %op%==N goto END
echo.
echo Comando no valido
echo.
echo ^< Presione una tecla para finalizar ^>
pause >nul
goto CONFIRM
:LOCK
ren LOCKEDFOLDER TWlock
attrib +h +s TWlock
echo.
echo Carpeta bloqueada
echo.
echo ^< Presione una tecla para finalizar ^>
pause >nul
goto End
:UNLOCK
Set "tmpFile=%TEMP%\password.txt"
PowerShell.exe -Command $pword = read-host "Introduzca clave " -AsSecureString ; ^
$BSTR=[System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($pword) ; ^
[System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR) > "%tmpFile%"
(Set /P password=<"%tmpFile%") & (Del /Q "%tmpFile%")
FOR /F "delims=·" %%A IN (clave.txt) DO CALL:Tratar "%%A"
if %password%==%Reg% (goto Decrypt) else goto FAIL
:Decrypt
attrib -h -s TWlock
ren TWlock LOCKEDFOLDER
echo.
echo Carpeta desbloqueada
echo.
echo ^< Presione una tecla para finalizar ^>
pause >nul
goto End
:FAIL
echo.
echo Clave no valida
echo.
echo ^< Presione una tecla para finalizar ^>
pause >nul
goto End
:MDLOCKER
Set "tmpFile=%TEMP%\password.txt"
PowerShell.exe -Command $pword = read-host "Establezca su clave de desbloqueo " -AsSecureString ; ^
$BSTR=[System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($pword) ; ^
[System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR) > "%tmpFile%"
(Set /P password=<"%tmpFile%") & (Del /Q "%tmpFile%")
echo %password% > clave.txt
attrib +h +s clave.txt
md LOCKEDFOLDER
echo.
echo Carpeta privada creada con exito
echo.
echo.
echo ^< Presione una tecla para finalizar ^>
pause >nul
goto End
:Tratar
rem aquí se procesa cada línea del archivo
SET Reg=%~1
GOTO:EOF
:End
con el código de arriba funciona bien pero, quise poner una linea más para confirmar contraseña, es decir, debería aparecer así:
Establezca su clave de desbloqueo: **********
Confirme su clave de desbloqueo: **********
Si coinciden crea la carpeta si no coinciden lo regresa, para eso modifique así:
cls
@echo off
title LOCKEDFOLDER.exe
color 0a
echo.
echo ==============================================================================
echo LOCKEDFOLDER [Version 2.0.1]
echo ------------------------------------------------------------------------------
echo.
if EXIST TWlock goto UNLOCK
if NOT EXIST LOCKEDFOLDER goto MDLOCKER
:CONFIRM
set /p op=Seguro que quieres proteger la carpeta? (S/N):
if %op%==S goto LOCK
if %op%==s goto LOCK
if %op%==n goto END
if %op%==N goto END
echo.
echo Comando no valido
echo.
echo ^< Presione una tecla para finalizar ^>
pause >nul
goto CONFIRM
:LOCK
ren LOCKEDFOLDER TWlock
attrib +h +s TWlock
echo.
echo Carpeta bloqueada
echo.
echo ^< Presione una tecla para finalizar ^>
pause >nul
goto End
:UNLOCK
Set "tmpFile=%TEMP%\password.txt"
PowerShell.exe -Command $pword = read-host "Introduzca clave " -AsSecureString ; ^
$BSTR=[System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($pword) ; ^
[System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR) > "%tmpFile%"
(Set /P password=<"%tmpFile%") & (Del /Q "%tmpFile%")
FOR /F "delims=·" %%A IN (clave.txt) DO CALL:LEER "%%A"
if %password%==%Reg% (goto Decrypt) else goto FAIL
:Decrypt
attrib -h -s TWlock
ren TWlock LOCKEDFOLDER
echo.
echo Carpeta desbloqueada
echo.
echo ^< Presione una tecla para finalizar ^>
pause >nul
goto End
:FAIL
echo.
echo Clave no valida
echo.
echo ^< Presione una tecla para finalizar ^>
pause >nul
goto End
:MDLOCKER
Set "tmpFile=%TEMP%\password.txt"
PowerShell.exe -Command $pword = read-host "Establezca su clave de desbloqueo (Por favor no olvide su clave, no hay forma de recuperarla) " -AsSecureString ; ^
$BSTR=[System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($pword) ; ^
[System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR) > "%tmpFile%"
(Set /P password=<"%tmpFile%") & (Del /Q "%tmpFile%")
Set "tmpFile=%TEMP%\password2.txt"
PowerShell.exe -Command $pword2 = read-host "Confirme su clave de desbloqueo " -AsSecureString ; ^
$BSTR=[System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($pword) ; ^
[System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR) > "%tmpFile%"
(Set /P password2=<"%tmpFile%") & (Del /Q "%tmpFile%")
if %password%==%password2% (goto CREAR) else goto DIFERENTES
:CREAR
echo %password% > clave.txt
attrib +h +s clave.txt
md LOCKEDFOLDER
echo.
echo Carpeta privada creada con exito
echo.
echo ^< Presione una tecla para finalizar ^>
pause >nul
goto End
:DIFERENTES
echo.
echo Las claves no coinciden
echo.
echo ^< Presione una tecla para finalizar ^>
pause >nul
goto End
:LEER
SET Reg=%~1
GOTO:EOF
:End
El problema con este código es que al ejecutarlo al primera vez siempre en lugar de pedir que establezca la contraseña me manda a confirmar, podrian ayudarme a ver que esta mal, gracias