Пакетный файл для уменьшения длины имени файла

#batch-file #batch-processing

#пакетный файл #пакетная обработка

Вопрос:

я загружаю имена файлов, подобные этому .. batchengine-6099-1283555555-60054_20100910_0006 .era и хочу переименовать их в 60054_20100910_0006.era. Имена меняются, но формат тот же, требуется инструкция для переименования всех больших файлов, заканчивающихся на .era

Ответ №1:

У меня нет доступа к окну Windows, но что-то вроде:

 SETLOCAL EnableExtensions EnableDelayedExpansion
FOR %%I IN (batchengine-*.era) DO (
    SET NAME=%%~nI
    RENAME "%%I" "!NAME:~28!%%~xI"
)
ENDLOCAL
  

Введите FOR /? , SET /? и SETLOCAL /? в консоли для получения всех подробностей о синтаксисе. Надеюсь, у меня есть что-то очень близкое. Вам нужно ввести новые переменные внутри цикла, чтобы вы могли получить доступ к расширенному синтаксису для подстрочного индекса — например, !NAME:~28! выбирает подстроку, начинающуюся с символа 28. !NAME! — это ссылка на отложенное расширение. Необходимость этого объясняется на одной из страниц краткого описания команд.

Комментарии:

1. кажется, что это выполняется без остановки, но по-прежнему не работает ..echo SETLOCAL EnableExtensions EnableDelayedExpansion для /f %%I В (‘dir / b batchengine *.era’) УСТАНОВИТЕ [NAME=[[%%~nI]] и УСТАНОВИТЕ [NEWNAME=[[!NAME:~28!%%~xI]] и ПЕРЕИМЕНУЙТЕ ! ИМЯ! !НОВОЕ ИМЯ! amp; приостановка приостановка endlocal

2. Если бы я оставил ~ 28!.%% с . имя файла, которое я мог видеть при запуске, было 6066 ..era, а не 6066.era?

3. [NAME=[batchengine1-6099-12705488236217491.GP010698_61101_20100406_000217]] [NEWNAME=[ИМЯ:~28.era]

4. после запуска пакета я дал команду set. это результат выполнения команды set. похоже, что часть newname не работает. пакетный файл не может найти файл ….? вот как выглядит мой пакет: echo SETLOCAL EnableExtensions EnableDelayedExpansion ДЛЯ %I В (batchengine*.era) DO ( SET [NAME=[%~nI]] SET [NEWNAME=[NAME:~28.era] ПЕРЕИМЕНОВАТЬ ! ИМЯ! !НОВОЕ ИМЯ! ) ENDLOCAL

5. Я думаю, что вижу проблему. Я забыл, что %%~xI включает в себя . расширение from. Я исправил свой ответ тем, что я действительно тестировал это на своем Windows box.