2

Я пытаюсь хэшировать пакетный / .bat скрипт, который переименовывает один файл в случайную строку символов. Все, что я нашел при поиске, - это переименовать все файлы в одном каталоге - это немного больше, чем я ищу.

Следующий пример сценария является основой того, над чем я работаю. Он в основном переименовывает все файлы .txt в рабочем каталоге в произвольное имя файла длиной 8 символов, сохраняя расширение файла:

@echo off
setlocal disableDelayedExpansion
set "chars=ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
for /f "eol=: delims=" %%F in ('dir /b /a-d *.txt') do call :renameFile "%%F"
exit /b

:renameFile
setlocal enableDelayedExpansion
:retry
set "name="
for /l %%N in (1 1 8) do (
  set /a I=!random!%%36
  for %%I in (!I!) do set "name=!name!!chars:~%%I,1!"
)
echo if exist !name!.jpg goto :retry
endlocal & ren %1 %name%.txt

Причина, по которой я пытаюсь переименовать только один файл, заключается в том, что моей конечной целью является создание расширения оболочки, в котором используется сценарий. Я хочу иметь возможность щелкнуть правой кнопкой мыши один файл, щелкнуть "Переименовать случайный", и он вызывает командный файл, чтобы переименовать выбранный файл в произвольное имя.

Если у кого-нибудь есть какие-либо дополнения или изменения в вышеупомянутом коде, которые могут мне помочь, это было бы здорово! Спасибо

2 ответа2

2

Как я могу изменить свой командный файл, чтобы переименовать один файл в случайную строку символов?

Вы можете передать имя файла, который вы хотите изменить, в качестве аргумента %1 в пакетный файл.

Вот модифицированный пакетный файл:

@echo off
setlocal enableDelayedExpansion
set "chars=ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
:retry
set "name="
for /l %%N in (1 1 8) do (
  set /a I=!random!%%36
  for %%I in (!I!) do set "name=!name!!chars:~%%I,1!"
)
if exist !name!%~x1 goto :retry
endlocal & ren %1 %name%%~x1

Заметки:

  • Только часть имени файла %1 рандомизирована.
  • Существующее расширение сохраняется.

Пример:

F:\test>dir *.dat
 Volume in drive F is Expansion
 Volume Serial Number is 3656-BB63

 Directory of F:\test

15/12/2015  12:59                 0 random.dat
               1 File(s)              0 bytes
               0 Dir(s)  1,776,913,768,448 bytes free

F:\test>test random.dat

F:\test>dir *.dat
 Volume in drive F is Expansion
 Volume Serial Number is 3656-BB63

 Directory of F:\test

15/12/2015  12:59                 0 IYSPA2FS.dat
               1 File(s)              0 bytes
               0 Dir(s)  1,776,913,768,448 bytes free

Дальнейшее чтение

  • Индекс AZ командной строки Windows CMD - Отличный справочник по всем вопросам, связанным с командной строкой Windows.
  • enabledelayedexpansion - отложенное расширение приведет к тому, что переменные будут расширяться во время выполнения, а не во время анализа.
  • for /l - условно выполнить команду для диапазона чисел.
  • параметры - аргумент командной строки (или параметр) - это любое значение, переданное в пакетный скрипт.
-1

Это очень просто. Вот командный файл:

@echo off
set name=%1
set newname=%random%%random%
ren %name% %newname%.txt

После этого вам нужно перейти в реестр к разделу с именем расширения файла, которое вы хотите переименовать. В моем случае я захожу в HKEY_CLASSES_ROOT\.txt и проверяю значение ключа по умолчанию. В моем случае это файл Notepad++_. Затем я перехожу к HKEY_CLASSES_ROOT\Notepad++_file , создаю новый подраздел, например, "Переименовать в Случайный" и подраздел "команда" в нем (без кавычек). В HKEY_CLASSES_ROOT\Notepad++_file\shell\Rename to Random\command я изменяю значение по умолчанию на "C:\Temp\random_rename.bat" "%1" (с кавычками!)

После этого, когда я щелкаю правой кнопкой мыши на каждом текстовом файле и выбираю опцию Rename to Random, он переименовывается в 8-значное имя.

PS Отредактируйте путь к реальному местоположению вашего командного файла, когда вы добавите его в реестр. Также вы можете редактировать переменную %newname% по своему усмотрению . В моем случае это имя состоит из двух четырехзначных групп, каждая из которых генерируется системной переменной %random% .

Проверьте это для пошаговых действий в реестре.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .