Загрузка данных


@echo off
rem ===================================================================
rem  crypt.bat - шифрование и расшифровка всех .txt файлов в папке
rem  с помощью GnuPG (ПЗ N3, п. 2.5.9, вариант 1)
rem
rem  Запуск:
rem     crypt.bat /e <папка>   - зашифровать все *.txt своим ключом
rem     crypt.bat /d <папка>   - расшифровать все *.txt.gpg обратно
rem
rem  Пример:
rem     crypt.bat /e C:\pr3\test
rem     crypt.bat /d C:\pr3\test
rem ===================================================================

rem Переменные, созданные в скрипте, не попадут в окно cmd после завершения
setlocal

rem ---------- 1. Проверка параметров --------------------------------

rem Если второй параметр (папка) не указан - показываем подсказку
if "%~2"=="" goto usage

rem %~f2 - полный путь к папке (даже если передали относительный)
set "FOLDER=%~f2"

rem Проверяем, что папка существует
if not exist "%FOLDER%\" (
    echo Folder not found: %FOLDER%
    exit /b 2
)

rem Выбираем действие по первому параметру (/i - без учёта регистра)
if /i "%~1"=="/e" goto encrypt
if /i "%~1"=="/d" goto decrypt

:usage
echo Usage:  %~nx0 /e ^<folder^>   - encrypt all *.txt
echo         %~nx0 /d ^<folder^>   - decrypt all *.txt.gpg
exit /b 2


rem ---------- 2. Шифрование (/e) ------------------------------------
:encrypt
echo Encrypting *.txt in %FOLDER% ...

rem dir /b выдаёт список имён файлов; for /f перебирает их по одному.
rem Список берётся заранее, поэтому новые .gpg файлы в цикл не попадут.
for /f "delims=" %%F in ('dir /b /a-d "%FOLDER%\*.txt" 2^>nul') do (

    rem --default-recipient-self : шифровать своим открытым ключом
    rem --output                  : имя результата = имя файла + .gpg
    rem --yes                     : перезаписывать без вопросов
    gpg --yes --default-recipient-self --output "%FOLDER%\%%F.gpg" --encrypt "%FOLDER%\%%F"

    rem errorlevel 0 - gpg отработал без ошибок
    if not errorlevel 1 (
        rem исходный открытый текст удаляем, остаётся только шифр
        del "%FOLDER%\%%F"
        echo   encrypted: %%F  -^>  %%F.gpg
    ) else (
        echo   ERROR encrypting: %%F
    )
)
echo Done.
exit /b 0


rem ---------- 3. Расшифровка (/d) -----------------------------------
:decrypt
echo Decrypting *.txt.gpg in %FOLDER% ...

for /f "delims=" %%F in ('dir /b /a-d "%FOLDER%\*.txt.gpg" 2^>nul') do (

    rem %%~nF - имя без последнего расширения: a.txt.gpg станет a.txt
    rem gpg сам найдёт нужный закрытый ключ и спросит пароль
    gpg --yes --output "%FOLDER%\%%~nF" --decrypt "%FOLDER%\%%F"

    if not errorlevel 1 (
        rem зашифрованная копия больше не нужна
        del "%FOLDER%\%%F"
        echo   decrypted: %%F  -^>  %%~nF
    ) else (
        echo   ERROR decrypting: %%F
    )
)
echo Done.
exit /b 0