4

У меня есть много файлов, названных так:
YYY.XXXXXX

и мне нужно написать командную команду DOS, чтобы переименовать так:
YYYXXXXXX.ZZZ

YYY и ZZZ - фиксированная строка, только XXXXXX - переменная.

попробовал это безуспешно:
rename YYY.?????? YYY??????.ZZZ

2 ответа2

9

Вы можете использовать оператор for чтобы сделать это, потому что он дает вам доступ к имени файла и расширению отдельно:

for /f "tokens=1* delims=." %i in ('dir /b yyy.*') do ren "%i.%j" "%i%j.zzz"

Использование tokens=1,2 delims=. вызывает разделение значения, возвращаемого dir /b yyy.* на . в переменные %i и %j , где %i - имя файла (или «yyy»), а %j - расширение переменной (без начальной точки .).

Используйте команду выше, если вы печатаете ее непосредственно из командной строки. Из пакетного файла вам нужно удвоить все символы % как это:

for /f "tokens=1* delims=." %%i in ('dir /b yyy.*') do ren "%%i.%%j" "%%i%%j.zzz"

Убедитесь, что вы запускаете эту команду из папки, в которой находятся все файлы yyy.xxxxxx .

0

Точно так же, прежде чем пытаться использовать ren или любую другую команду, сначала попробуйте echo чтобы увидеть, что будет сделано, вместо:

for /f "tokens=1* delims=." %i in ('dir /b yyy.*') do ren "%i.%j" "%i%j.zzz"

Сначала выполните (чтобы увидеть, какие команды будут выполняться):

for /f "tokens=1* delims=." %i in ('dir /b yyy.*') do @(echo ren "%i.%j" "%i%j.zzz")

После вывода покажите, что команды - это то, что вы хотите, просто удалите echo .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .