Guest User

123

a guest
Mar 7th, 2025
26
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.43 KB | None | 0 0
  1. :: Скрипт копирует файлы заданного типа из всех подкаталогов заданного каталога в один каталог, меняя название Файлов на их хеш SHA-256.
  2.  
  3.  
  4. @echo off
  5. chcp 1251 >nul
  6. setlocal disabledelayedexpansion
  7.  
  8. :: Запрос параметров
  9. set /p "fileExtension=Введите тип файлов (без точки и маски, например mp4): "
  10. set /p "sourceDir=Введите исходный каталог: "
  11. set /p "targetDir=Введите целевой каталог: "
  12.  
  13. :: Проверка введенных данных
  14. if not defined fileExtension (
  15. echo Не указан тип файлов!
  16. pause
  17. exit /b 1
  18. )
  19.  
  20. if not defined sourceDir (
  21. echo Не указан исходный каталог!
  22. pause
  23. exit /b 1
  24. )
  25.  
  26. if not defined targetDir (
  27. echo Не указан целевой каталог!
  28. pause
  29. exit /b 1
  30. )
  31.  
  32. :: Нормализация путей
  33. set "sourceDir=%sourceDir:"=%"
  34. set "targetDir=%targetDir:"=%"
  35.  
  36. :: Проверка существования исходного каталога
  37. if not exist "%sourceDir%\" (
  38. echo Ошибка: Исходный каталог не существует!
  39. pause
  40. exit /b 1
  41. )
  42.  
  43. :: Создание целевого каталога
  44. if not exist "%targetDir%\" mkdir "%targetDir%"
  45.  
  46. :: Основной цикл обработки
  47. for /r "%sourceDir%" %%a in (*.%fileExtension%) do (
  48. set "filePath=%%a"
  49. call :processFile
  50. )
  51.  
  52. endlocal
  53. exit /b
  54.  
  55. :processFile
  56. setlocal enabledelayedexpansion
  57. set "filePath=\\?\!filePath!"
  58. set "tempHashFile=%temp%\hash.tmp"
  59.  
  60. :: Вычисление хеша
  61. certutil -hashfile "!filePath!" SHA256 > "!tempHashFile!" 2>&1
  62.  
  63. set "hash="
  64. for /f "skip=1 tokens=*" %%H in ('type "!tempHashFile!"') do (
  65. if not defined hash set "hash=%%H"
  66. )
  67.  
  68. set "hash=!hash: =!"
  69.  
  70. if "!hash!"=="" (
  71. echo Ошибка: Не удалось получить хеш для "!filePath!"
  72. goto :skip
  73. )
  74.  
  75. set "newName=!hash!.%fileExtension%"
  76.  
  77. if exist "%targetDir%\!newName!" (
  78. echo Файл "%targetDir%\!newName!" уже существует. Пропускаем "!filePath!".
  79. ) else (
  80. echo Копирование "!filePath!" в "%targetDir%\!newName!"
  81. copy "!filePath!" "%targetDir%\!newName!" >nul
  82. )
  83.  
  84. :skip
  85. del /q "!tempHashFile!" 2>nul
  86. endlocal
  87. exit /b
Advertisement
Add Comment
Please, Sign In to add comment