Ну, есть несколько вещей, которые происходят:
- Ваша система настроена на использование языка, отличного от английского?
В моей (основанной на английском языке) системе вы пытаетесь выполнить команду
FOR /F
, а не FOR /G
- Вы извлекаете три (
1-3
) токена, начиная с %%G
, но затем используете %%F
, %%G
и %%H
Ничего не помещается в %%F
Либо измените оператор FOR
чтобы он ссылался на %%F
, либо измените тело цикла, чтобы использовать %%G
, %%H
и %%I
Кроме …
... не делай этого.
Ваш подход ошибочен.
Подумайте о том, что значит иметь точку (.
) И пробел в качестве разделителей.
Ваши имена файлов разбиваются на токены, как это:
# 1 # 2 # 3 # 4 # 5 ERJP00300029 3.13.jpg → ERJP00300029 3 13 jpg SRKP00100002 12.04.jpg → SRKP00100002 12 04 jpg ERJP01500001 ERJP12 10.5.jpg → ERJP01500001 ERJP12 10 5 jpg
так,
- имя файла не всегда равно
part1 part2.part3
,
- расширение не всегда третий токен, а, по сути,
- для вашего примера имен файлов, это никогда не третий токен, и
- это не всегда один и тот же номер токена.
Мы должны вернуться к этому.
- Как вы думаете, что вы делаете с командой REN (RENAME)?
В частности, почему вы помещаете
\%SourceDir%
между part1
и part2
?
Единственная надежда на выполнение этой работы - поместить %SourceDir%\
перед part1
.
И обратите внимание, что обратная косая черта (\
) должна идти после %SourceDir%
.
- Если это полный пакетный файл, вам не нужно делать ничего особенного в конце.
Пакетный файл завершится, когда достигнет конца.
Но, если это часть более крупной системы, вы можете захотеть иметь явную завершающую команду в конце.
Эта команда должна быть
GOTO :EOF
, а не GOTO EOF
.
Не в кучу, но ваш подход к выводу из DIR
и немедленному разбиванию его в токенах ошибочен.
Если посмотреть на имена ваших примеров, строка ERJP12 10.5
будет разбита на три токена :ERJP12
, 10
и 5
.
Но ERJP12.10.5
будет разбит на те же токены, как и ERJP12 10 5
и ERJP12.10 5
.
Вы не можете восстановить исходные (то есть, текущие, существующие) имена файлов из токенов; вам нужно захватить исходное имя файла без изменений, а затем разбить его.
Я не понимаю, почему вам нужно запустить DIR
. Все, что вам нужно, это FOR %%F IN ("%SourceDir%\*.jpg") DO
; он даст вам только имена файлов (без подкаталогов), и, в отличие от вывода DIR
, будет содержать имя исходного каталога (каталог, содержащий файлы).
Теперь, когда у нас есть полный текущий путь к файлу в %%F
, мы можем начать разбивать его.
Теперь мы используем FOR /F
Итак, возьмите часть файла п РРЭ %%F
и вытащить маркер , который является первой частью одиночки.
Затем переименуйте исходный полный путь к первой части плюс напряжение e x .
Вот полный пакетный файл:
SET SourceDir=F:\Ezhilarasan\Exibt\need_upload\ERHP\check
FOR %%F IN ("%SourceDir%\*.jpg") DO (
FOR /F "DELIMS=. " %%A IN ("%%~nF") DO (
REN "%%F" "%%A%%~xF"
)
)