Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- :: Скрипт копирует файлы заданного типа из всех подкаталогов заданного каталога в один каталог, меняя название Файлов на их хеш SHA-256.
- @echo off
- chcp 1251 >nul
- setlocal disabledelayedexpansion
- :: Запрос параметров
- set /p "fileExtension=Введите тип файлов (без точки и маски, например mp4): "
- set /p "sourceDir=Введите исходный каталог: "
- set /p "targetDir=Введите целевой каталог: "
- :: Проверка введенных данных
- if not defined fileExtension (
- echo Не указан тип файлов!
- pause
- exit /b 1
- )
- if not defined sourceDir (
- echo Не указан исходный каталог!
- pause
- exit /b 1
- )
- if not defined targetDir (
- echo Не указан целевой каталог!
- pause
- exit /b 1
- )
- :: Нормализация путей
- set "sourceDir=%sourceDir:"=%"
- set "targetDir=%targetDir:"=%"
- :: Проверка существования исходного каталога
- if not exist "%sourceDir%\" (
- echo Ошибка: Исходный каталог не существует!
- pause
- exit /b 1
- )
- :: Создание целевого каталога
- if not exist "%targetDir%\" mkdir "%targetDir%"
- :: Основной цикл обработки
- for /r "%sourceDir%" %%a in (*.%fileExtension%) do (
- set "filePath=%%a"
- call :processFile
- )
- endlocal
- exit /b
- :processFile
- setlocal enabledelayedexpansion
- set "filePath=\\?\!filePath!"
- set "tempHashFile=%temp%\hash.tmp"
- :: Вычисление хеша
- certutil -hashfile "!filePath!" SHA256 > "!tempHashFile!" 2>&1
- set "hash="
- for /f "skip=1 tokens=*" %%H in ('type "!tempHashFile!"') do (
- if not defined hash set "hash=%%H"
- )
- set "hash=!hash: =!"
- if "!hash!"=="" (
- echo Ошибка: Не удалось получить хеш для "!filePath!"
- goto :skip
- )
- set "newName=!hash!.%fileExtension%"
- if exist "%targetDir%\!newName!" (
- echo Файл "%targetDir%\!newName!" уже существует. Пропускаем "!filePath!".
- ) else (
- echo Копирование "!filePath!" в "%targetDir%\!newName!"
- copy "!filePath!" "%targetDir%\!newName!" >nul
- )
- :skip
- del /q "!tempHashFile!" 2>nul
- endlocal
- exit /b
Advertisement
Add Comment
Please, Sign In to add comment