Перепишите первые три символа имен файлов *.ext в папке с набором букв

Как переписать первые 3 буквы имени файла

  • Использование заданного алфавита: ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 для рандомизации символов
  • Ориентация на все файлы определенного расширения в папке *.ext
  • Случайное дублирование 3 символов не имеет значения (уже 46 656 переменных)
  • Пакетное решение сценария для запуска в среде Windows.
  • Предпочитаю, чтобы скрипт был простым, чтобы сократить время выполнения.

Предлагаемый код и разбивка. Примечание: я до сих пор не знаю, как кодировать.

  • Оригинал:

    032_name.ext
    039_name.ext
    0D8_name.ext
    333_other.txt
    
  • Написать поверх первых трех символов

    XXX-name.ext
    
  • После

    D7K_name.ext
    L2V_name.ext
    720_name.ext
    333_other.txt
    

Создайте пакетный файл (SetRename.bat или SetRename.cmd) и выполните команду:

SetRename %r *.ext   /or/ SetRename %r3%name% *.ext  /or/ SetRename
  • Код 1 адаптирован из DavidPostill, пример полного решения

    @echo off
    setlocal enabledelayedexpansion
    rem initialise counter
    set "alphabet=A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9"
    rem process jpg and png files
    for /f "usebackq tokens=*" %%i in (`dir /b *.ext *.ex2`) do (
      rem split into name and extension
      set _name=[reduce 3 characters]]%%~ni
      set _ext=%%~xi
      rem do the rename
      ren "%%i" "!y!-!_name!-!_ext!"
      increment counter
      set /alphabet "%Random%"
      )
    endlocal
    
  • Код 2 адаптирован из 3 сообщений SU

    @echo off
    
    setlocal enableextensions enabledelayedexpansion
    
    set "alphabet=A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9"
    
    for %%a in (%alphabet%) do (
        set "a.!name!=%%a"
    set o=-%3 [reduce by 3] 
    
    )   
    set "y="
    for /l %%a in (1 1 3) do (
        set /a "r=!random!"
        for %%b do set "y=!-%3!!r!!name!"
    )
    echo(%y%
    
    endlocal
    

Текущее исследование:

1 ответ

Решение

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

Используйте следующий пакетный файл (SetRename.cmd):

@echo off
setlocal enableDelayedExpansion
set "_chars=ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
for %%f in (%*) do (
  rem split into name and extension
  set "_name=%%~nf"
  rem remove first 3 characters from _name
  set "_name=!_name:~3!"
  set "_ext=%%~xf"
  rem create a 3 character random prefix
  set "_prefix="
  for /l %%n in (1 1 3) do (
    set /a i=!random!%%36
    for %%i in (!i!) do (
      set "_prefix=!_prefix!!_chars:~%%i,1!" (
      )
    )
  echo ren "%%f" "!_prefix!!_name!!_ext!"
  )
endlocal

Заметки:

  • Удалить echo когда ты доволен ren команда

Пример использования:

> dir /b
032_name.ext
039_name.ext
0D8_name.ext
333_other.txt
SetRename.cmd

> SetRename *.ext

> dir /b
333_other.txt
C42_name.ext
FZW_name.ext
MYQ_name.ext
SetRename.cmd

> SetRename *.ext

> dir /b
333_other.txt
A6O_name.ext
A8H_name.ext
H5P_name.ext
SetRename.cmd

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

Другие вопросы по тегам