Как я могу извлечь подстроку из имени файла с помощью пакетного скрипта? - PullRequest
0 голосов
/ 23 мая 2019

У меня есть сотни файлов, которые я хочу переименовать в соответствии с новым соглашением. Текущее соглашение - AA.BBBB.XXX Я хочу изменить его на BBBB.AA.XXX

Я записал компакт-диск в папку, содержащую все эти файлы. Я думал, что мог бы просто пройтись по файлам и получить подстроки, необходимые для восстановления имени файла. Проблема в том, что% name% кажется пустым при отражении.

for %%f in (*) do (
    set name=%%f
    set arr=%name:~0,3%
    set sta=%name:~3,5%
    set rest=%name:~8,26%
    set new=%sta%%arr%%rest%
    echo f: %%f
    echo name: %name%
    echo arr: %arr%
    echo sta: %sta%
    echo rest: %rest%
    echo new: %new%
    set
    pause
)

Как вы можете видеть внизу, я назвал 'set', чтобы увидеть, что происходит с этими переменными. Он показывает, что% name% равно ожидаемому, но показывает пустое при отражении, а мои другие назначения переменных не могут извлечь подстроки из% name%.

Ответы [ 3 ]

1 голос
/ 23 мая 2019

Если точки в вашем соглашении должны быть буквальными,
Вы можете использовать их, чтобы разделить имена с помощью for /f и изменить порядок частей.

Редактировать: из-за Подсказка Compo изменила итерацию для проверки соглашения с RegEx

:: Q:\Test\2019\05\23\SO_56266054.cmd
@Echo off
PushD "A:\Test"

For /f "delims=" %%F in ('Dir /B "??.????.*"^|findstr "^..\.....\.*"'
  ) do For /F "tokens=1,2*delims=." %%A in ("%%F"
    ) Do Echo Ren "%%F" "%%B.%%A.%%C"

PopD

Если вывод выглядит нормально, уберите эхо.

Пример вывода:

> Q:\Test\2019\05\23\SO_56266054.cmd
Ren "AA.BBBB.XXX" "BBBB.AA.XXX"
Ren "CC.DDDD.YYYY" "DDDD.CC.YYYY"
Ren "EE.FFFF.ZZZZZ" "FFFF.EE.ZZZZZ"
0 голосов
/ 23 мая 2019

Ваш подход в порядке, если немного неуклюж

0 голосов
/ 23 мая 2019

Вот одна идея, использующая отложенное расширение:

@Echo Off
For /F Delims^=^ EOL^= %%A In ('Where ".:??.????.???" 2^>NUL') Do (
    Set "_=%%~nA"
    SetLocal EnableDelayedExpansion
    Ren "%%A" "!_:~-4!.!_:~,2!%%~xA"
    EndLocal
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...