Пакет DOS - переименовать все файлы в подкаталогах, чтобы они имели префикс имени подкаталога.

У меня в основном такая установка:

C:\Upload\A
C:\Upload\B
C:\Upload\C
C:\Upload\D
C:\Upload\E

Где A, B, C, D, E всегда разные (идентификаторы продуктов) и всегда будут разные суммы (это не всегда будет 5 подкаталогов). Каждый из этих подкаталогов содержит 24 изображения, пронумерованных цифрами 01-24.

Мне нужно создать пакетный файл, который просматривает каталог Upload, получает имя каждого подкаталога и добавляет это имя в начало каждого файла изображения, содержащегося в этом подкаталоге.

Таким образом, C:\Upload\A\01.jpg станет C:\Upload\A\A-O1.jpg, как и остальные 23 изображения в каждом подкаталоге.

Пакетный файл должен сделать то же самое для каждого подкаталога в каталоге Upload.

Это звучит чрезвычайно сложно для меня, и хотя я начал пытаться написать это, у меня пока нет ничего, чем можно было бы поделиться в этом посте.

Любая помощь будет оценена.


person Will    schedule 10.07.2012    source источник
comment
Вы действительно используете DOS? (сомневаюсь) или какая-то версия винды?   -  person dbenham    schedule 10.07.2012


Ответы (1)


Это переименует файлы в подкаталогах «C:\Upload».

@echo off
for /d %%D in (C:\Upload\*) do (
  for /f "eol=: delims=" %%F in ('dir /b /a-d "%%D" ^| findstr /vbic:"%%~nD-"') do (
    ren "%%D\%%F" "%%~nD-%%F"
  )
)

Я добавил дополнительный код, чтобы предотвратить переименование одного и того же файла дважды. Вы должны иметь возможность безопасно запускать скрипт несколько раз.

Если вы хотите рекурсивно переименовывать файлы в каждом дереве подкаталогов, необходимо внести небольшое изменение в код.

@echo off
for /d /r "C:\Utils" %%D in (*) do (
  for /f "eol=: delims=" %%F in ('dir /b /a-d "%%D" ^| findstr /vbic:"%%~nD-"') do (
    ren "%%D\%%F" "%%~nD-%%F"
  )
)
person dbenham    schedule 10.07.2012
comment
Спасибо ... это работает именно так, как мне нужно! Можно ли сделать то же самое с PHP? - person Will; 16.07.2012
comment
@WillIrvine - Извините, я ничего не знаю о PHP. Не забудьте принять ответ, если на исходный вопрос получен удовлетворительный ответ. - person dbenham; 16.07.2012