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


-1

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

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

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

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


Пожалуйста, четко сформулируйте свою цель. Вы не определили критерий для переименования файлов (имена должны быть уникальными для каждой папки). Звездочки, которые вы использовали, не имеют смысла
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.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.