В CMD нет подстановочных знаков, которые не соответствуют символу, поэтому вместо этого вы можете временно изменить расширение файлов, имена которых заканчиваются на _:
Примечание : не забудьте запуститьследующие фрагменты из upperFolder и изменить% g для %% g, если вы работаете из командного файла.
:: /r stands for recursive and ~n stands for (file)name
for /r %g in (*_.jpg) do ren %g "%~ng.jphg"
Затем вы можете удалить файлы, имена которых не заканчиваются на _:
del /s *.jpg
И, наконец, переименуйте и переместите файлы, имена которых заканчиваются на _.Но вы просите что-то хитрое, то есть перед именем файла добавьте имя каталога, содержащего его, замените внутренний _ имени файла на -, удалите завершающий _ имени файла, а затем переместите файл в upperFolder:
:: so that the variable expansion inside for's works as expected
setlocal EnableDelayedExpansion
:: loop through all the directories and store the names in g
for /d %g in (*) do (
for %h in ("%g\*_.jphg") do (
set "newname=%~nh"
:: remove trailing _
set "newname=!newname:~0,-1!"
:: replace ALL _ with -, assuming the filename only has one inner _
set "newname=!newname:_=-!"
:: prepend directory name and restore extension
set "newname=%g_!newname!.jpg"
:: rename and move to current directory
move %h ".\!newname!"
)
)