Что такое выражение шаблона поиска DOS для поиска файлов с именем «Main» с любым целочисленным расширением? - PullRequest
3 голосов
/ 30 июля 2011

У меня есть программа, которая генерирует неизвестные номера файлов с расширением целого числа следующим образом.

enter image description here

Я хочу добавить .eps к каждому. Как это сделать в командном файле DOS?

Я не могу использовать следующее, потому что не знаю поискового выражения.

for %%x in (Main.<what>) do rename "%%x" "%%x.eps"

Примечание. Любые файлы с одинаковыми именами с нецелым расширением должны быть оставлены как есть.

Ответы [ 2 ]

3 голосов
/ 30 июля 2011
setlocal EnableDelayedExpansion
for %%x in (Main.*) do (
    set ext=%%~Xx
    set /a num=!ext:~1!
    if !num! gtr 0 rename "%%x" "%%x.eps"
)

Первый SET получает только расширение имени файла, включая точку (с ~ X).Второй SET / A попытаться преобразовать расширение (без точки с: ~ 1) в число.Если это действительно число (больше нуля), сделайте переименование.

1 голос
/ 30 июля 2011

Это должно перебрать каталог. Вот объяснение того, как это работает:

токены = 1-2 означает, что мы заботимся только о первой и второй части имени файла.

delims = . означает разделение токенов на . в имени файла.

dir /b означает только список файлов, но не отображать ни один из . или .., который обычно отображается в команде dir. Вам нужно поместить каталог туда или запустить из того же файлового каталога.

LSS a char всегда будет возвращать БОЛЬШЕ, ЧЕМ , вот как это работает. Я выбрал 9999, вы можете выбрать что угодно.

Наконец, требуется первая часть имени файла (%%A), а затем расширение (%%B), а затем переименовывается в первую часть имени файла (%%A) с расширением eps.

for /f "tokens=1-2 delims=." %%A in ('dir /b') do if %%B LSS 9999 rename %%A.%%B %%A.%%B.eps

Поместите это в свой пакетный файл и запустите.

Примечание. Вы не можете переименовать одно и то же имя файла, поэтому я использовал %%A.%%B.eps.

...