Переименовать файлы в пакетном скрипте

-1

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

for %%f in (%Source%\*DebugLog.Config) do %%f ren %%f "%Source%\%ProjectName%.*DebugLog.Config"

Идея заключается в том, что я добавляю префикс к любому файлу, который заканчивается в DebugLog.Config, так что он становится "projectName.DebugLog.Config"

Где это идет не так?

BatFileNewbie
источник
Пожалуйста, четко сформулируйте свою цель. Вы не определили критерий для переименования файлов (имена должны быть уникальными для каждой папки). Звездочки, которые вы использовали, не имеют смысла
SΛLVΘ

Ответы:

2

Я получаю неправильную синтаксическую ошибку, которую не могу определить

for %%f in (%Source%\*DebugLog.Config) do %%f ren %%f "%Source%\%ProjectName%.*DebugLog.Config".

В вашем командном файле есть несколько ошибок (2 из которых я сделал сам).

Как указал мне в комментариях в другом месте по dbenham :

Цель REN не может включать диск или путь. Это должно быть только имя и расширение

Использование простого FOR рискует переименовать файл более одного раза - не хорошо :-( Лучше использовать FOR / F с DIR / B

Посмотрите его ответ, добавьте «текст» в конец нескольких имен файлов для более подробного объяснения выше.

К тому же do %%fбессмысленно, должно быть просто do.

Вот рабочий пакетный файл:

@echo off
pushd %source%
for /f "delims= eol=:" %%f in ('dir /b /a-d *DebugLog.Config') do ren "%%f" "%ProjectName%.%%f"
popd

Дальнейшее чтение

  • Индекс AZ командной строки Windows CMD - Отличный справочник по всем вопросам, связанным с командной строкой Windows.
  • dir - Показать список файлов и подпапок.
  • for / f - Циклическая команда против результатов другой команды.
  • popd - изменить каталог обратно на путь / папку, которая была сохранена последней командой PUSHD.
  • pushd - изменить текущий каталог / папку и сохранить предыдущую папку / путь для использования командой POPD.
  • ren - переименовать файл или файлы.
ДэвидПостилл
источник
0

Это идет не так в более чем одном месте. Предполагая, %Source%заканчивается обратным слешем (правка: кажется, что нет, поэтому добавление обратного слеша :)

for %%f in (%Source%\*DebugLog.Config) do ren "%%f" "%ProjectName%.%%~nxf"

Цель ren не должна содержать путь, поэтому %%~nxfизвлекает Name и Extention of %%f.

тыс
источник