Ну, есть несколько вещей, которые происходят:
- Ваша система настроена на использование языка, отличного от английского?
В моей (основанной на английском языке) системе вы пытаетесь выполнить команду
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"
)
)