Ответ 1
Я не понимаю, почему вы не можете использовать пакетный файл. Но вот решение, которое должно работать с большинством имен файлов.
Критический - сначала вы должны убедиться, что у вас есть имя переменной undefined, я буду использовать fname
set "fname="
Далее приведена команда на самом деле переименования. Он не будет работать должным образом, если fname уже определено.
for %a in (prefix*.txt) do @(set "fname=%a" & call ren "%fname%" "%fname:*prefix=%")
Переменная fname определена для каждой итерации, а затем синтаксис %fname:*prefix=%
заменяет первое вхождение "префикса" ничем. Трудность в том, что Windows сначала пытается увеличить% fname%, когда команда сначала анализируется. Конечно, это не сработает, потому что оно еще не определено. В командной строке проценты сохраняются, если переменная не найдена. CALL вызывает дополнительную фазу расширения, которая возникает после того, как переменная установлена, поэтому расширение работает.
Если перед запуском команды задано fname, он просто попытается переименовать тот же файл для каждой итерации вместо значения, которое назначается в цикле.
Если вы хотите снова запустить команду с другим префиксом, вам придется сначала очистить определение еще раз.
EDIT. Вот командный файл с именем "RemovePrefix.bat", который выполняет задание
::RemovePrefix.bat prefix fileMask
@echo off
setlocal
for %%A in ("%~1%~2") do (
set "fname=%%~A"
call ren "%%fname%%" "%%fname:*%~1=%%"
)
Предположим, что у вас были файлы с именем "prefixName.txt"
, тогда вы использовали бы script, выполнив
RemovePrefix "prefix" "*.txt"
Пакетный файл переименует файлы в вашем текущем каталоге. Пакетный файл также должен находиться в вашем текущем каталоге, если пакетный файл не существует в каталоге, который находится в вашей переменной PATH. Или вы можете указать полный путь к пакетному файлу, когда вы его вызываете.
Правила для расширения различаются в пакетном файле. FOR переменные должны ссылаться как %% A вместо% A, а %% fname %% не разворачивается изначально, вместо этого двойные проценты преобразуются в один процент, а затем% fname% расширяется после CALL. Не имеет значения, если fname уже определено в командном файле. SETLOCAL делает определение fname временным (локальным) для командного файла.