mikeos написав:І наприклад в запропонованому вами варіанті з циклами - теоретично ітерацій більше ніж самих файлів, плюс вкладені цикли. А все через обмежені властивості cmd )
Очікується, що вкладений цикл робитиме 0 або 1 ітерацію за раз. Якщо ітерацій 2 або більше, це означає, що в нас кілька файлів, яким присвоюється однакове нове ім'я — чого за умовами задачі не мало б бути.
Проблемою є не можливості cmd, а відсутність стандартної утиліти назразок sed (яка, взагалі-то, не є частиною командної оболонки — це окрема програма, і в юніксах також). Якщо встановлено sed з GnuWin32 (чи іншого порту юніксових утиліт), можна зробити так:
for /f "tokens=1,2" %i in ('"dir/b|sed 's/\([0-9a-zA-Z]*\)-[^^.]*\(.*\)/\0 \1\2/; / /!d'"') do ren %i %j
Добре, визнаю, це досить громіздко й неінтуїтивно, вимагає встановлення додаткової програми sed, і якщо цей код використовувати не безпосередньо в командному рядку, а в батнику, то його доведеться місцями переробити (як мінімум, позамінювати % на %% і, можливо, збільшити кількість ^). Але це не те, що cmd принципово не може робити через якусь свою обмеженість порівняно з bash.