@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