переименовать все файлы в каталоге и его подкаталогах с помощью пакетного скрипта

переименовать все файлы в каталоге и его подкаталогах с помощью пакетного скрипта

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

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

@ echo off
setlocal EnableDelayedExpansion
for %%F in ("%userprofile%\music\*.*") do (
    ren "%%~F" "!RANDOM!.test"
)
endlocal

Как же это сделать со всеми дочерними каталогами и комбинациями букв и цифр?

решение1

поставьте /R после слова for, чтобы оно рекурсивно перешло в подкаталоги

@ echo off
setlocal EnableDelayedExpansion
for /R "%userprofile%\music\" %%F in (*.*) do (
    ren "%%~fF" "%%~fF%RANDOM%.test"
)
endlocal

Более подробную информацию о рекурсивном цикле for можно найти здесь:https://ss64.com/nt/for_r.html

для генерации случайных чисел заключите RANDOM в знаки %, например %RANDOM%.https://riptutorial.com/batch-file/example/32511/random-numbers

если вы хотите поставить точку между исходным именем файла и новым расширением, попробуйте ren "%%~fF" "%%~F.%RANDOM%.test". в моей системе он форматирует имена следующим образомTextures\Interface\VUI+\solid_black.dds.230.test

для powershell я бы сделал что-то вроде (это пробный запуск; удалите -WhatIf из строки, когда вы будете удовлетворены тем, что все работает, и захотите фактически выполнить переименование)

Get-ChildItem $env:USERPROFILE\music\ -Recurse -File | Rename-Item -WhatIf -NewName { $_.Name + "." + (Get-Random -Maximum 1000)+ ".test"}

Связанный контент