barbitoff programmer`s blog

Здесь я публикую заметки из программерской жизни: грабли, на которые мне случилось наступить, проблемы, для которых было найдено элегантное (или не очень) решение, а также все, с чем мне пришлось столкнуться и чем хотелось бы поделиться =)
PS Если хотите меня поблагодарить - на странице есть 3 места, чтобы это сделать =)

воскресенье, 19 февраля 2012 г.

cmd: массовое создание символических ссылок

Задача:
Есть папка, содержащая набор подпапок с jpg-файлами:
fldr1
     - subfldr1
          - 1.jpg
          - 2.jpg
     - subfldr2
          - 1.jpg
          - 2.jpg
...

     - subfldrN
          - 1.jpg
          - 2.jpg
Нужно в некоторой другой папке создать символические ссылки на все файлы всех подпапок папки fldr1 (имена символических ссылок непринципиальны).

Решение:
Следующий bat-ник принимает на вход 2 параметра: имя папки-источника и имя папки для создания символических ссылок (все имена без слешей в конце и с обратными слешами), и создает в последней символические ссылки с файлами 1.jpg .... m.jpg:

@echo off
SETLOCAL EnableDelayedExpansion
SET curdir=%CD%
SET cnt=0
FOR /F "tokens=*" %%i  IN ('dir %1 /b') DO (
FOR /F "tokens=*" %%f  IN ('dir "%1\%%i" /b') DO ( mklink %2\!cnt!.jpg  "%1\%%i\%%f"
SET /a cnt+=1 )
)
pause
Очень полезно с учетом того, что ротатор обоев в Windows 7 не умеет смотреть в подпапки выбранной папки, поэтому, чтобы в ротации участвовали обои из разных подпапок одной папки, нужно сгрузить символические ссылки на них в какую-нибудь одну папку.

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

Отправить комментарий