Я не понимаю, почему вы не можете использовать пакетный файл. Но вот решение, которое должно работать с большинством имен файлов.
Critical - сначала вы должны убедиться, что у вас есть неопределенное имя переменной, я буду использовать 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"
, то вы должны использовать сценарий, выполнив
RemovePrefix "prefix" "*.txt"
Пакетный файл будет переименовывать файлы в вашем текущем каталоге. Пакетный файл также должен находиться в вашем текущем каталоге, если пакетный файл не существует в каталоге, который находится в вашей переменной PATH. Или вы можете указать полный путь к пакетному файлу, когда вы его вызываете.
Правила расширения различаются в пакетном файле.FOR переменные должны ссылаться как %% A вместо% A, а %% fname %% не разворачивается изначально, вместо этого двойные проценты преобразуются в один процент, а затем% fname% расширяется после CALL. Не имеет значения, если fname уже определено в командном файле. SETLOCAL делает определение fname временным (локальным) для командного файла.
Эти команды даже не работают хорошо с очень большими каталогами. Он продолжает добавлять префикс к файлам, к которым он уже добавил префикс. – hnviet