Заменить имена файлов в папках и подпапках на bat-файл - PullRequest
0 голосов
/ 02 октября 2019

Этот код работает, когда я делаю это для ОДНОЙ папки (когда я удаляю параметр / r перед циклом FOR), но когда я включаю параметр / r, он может видеть файлы, но не может переименовывать их.

Я хочу переименовать середину файла с «-24px» на «lol»

@echo on
setlocal enableDelayedExpansion
for /r %%F in (*-24px*) do (
  set filename="%%F"
  ren "!filename!" "!filename:-24px=lol!"
)

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

Выход:

(
  set filename="C:\node_project\fold\1-24px1"
  ren !filename! !filename:-24px=lol!
)
The syntax of the command is incorrect.

1 Ответ

2 голосов
/ 02 октября 2019

Причина: ren местом назначения является только имя файла - без пути. Синтаксис:

REN [drive:][path]filename1 filename2

Ваш !filename! - это полный путь при использовании /R.

Решение:

Получите имя файла .ext с помощью %%~nxF(см. for /?, чтобы узнать больше об этих модификаторах) и соответственно измените синтаксис ren: тогда полный путь (источник) будет "%%F", а местом назначения будет адаптированный "!filename!":

@echo on
setlocal enableDelayedExpansion
for /r %%F in (*-24px*) do (
  set filename="%%~nxF"
  ren "%%F" "!filename:-24px=lol!"
)
...