Пакетный файл для удаления скопированных ярлыков с общего рабочего стола

В настоящее время я использую этот код для копирования ярлыков из папки на сервере в C:\Users\Desktop:

if not exist "%1" md "%1"
copy /y "%~dp0PlaceShortcutsHere\*.*" "%1"

Это копирует любые ярлыки, которые я помещаю в папку, на рабочий стол.

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

Есть ли способ сравнить ярлыки на рабочем столе и на сервере и удалить только те, что есть в обеих папках, и только с рабочего стола компьютера?

Эти ярлыки — не все ярлыки на рабочем столе машин, есть и другие, поэтому нужно удалить только те, которые присутствуют в обоих местах. Мне также нужно, чтобы это было адаптивным, поскольку ярлыки, присутствующие на сервере, будут добавляться или удаляться по мере необходимости.

Это должно быть развернуто через SCCM 2007/12, но я хочу сначала протестировать его локально.

И да, использование GP было бы проще, но GP, который мы используем, перестал работать, поэтому мне нужен резервный способ развертывания ярлыков.


person Tom Smith    schedule 16.02.2016    source источник


Ответы (1)


Потребовалось некоторое время, но я сам нашел ответ. Публикация этого, если это полезно кому-то в будущем.

dir "%~dp0PlaceShortcutsHere\*" /a /b /-p /o:gen>>"%~dp0ShortcutList_%date:~-4,4%%date:~-7,2%%date:~-10,2%.txt"
Pushd \\<Server>\<Share>
for /F "delims=" %%G in (ShortcutList_%date:~-4,4%%date:~-7,2%%date:~-10,2%.txt) DO Del "C:\Users\Public\Desktop\%%G"
del "%~dp0ShortcutList_%date:~-4,4%%date:~-7,2%%date:~-10,2%.txt"

Разбивая это:

dir "%~dp0PlaceShortcutsHere\*" /a /b /-p /o:gen>>"%~dp0ShortcutList_%date:~-4,4%%date:~-7,2%%date:~-10,2%.txt"

Вышеупомянутый создал текстовый файл с именами ярлыков в нем для ссылки на следующую строку.

Pushd \\<Server>\<Share>
for /F "delims=" %%G in (ShortcutList_%date:~-4,4%%date:~-7,2%%date:~-10,2%.txt) DO Del "C:\Users\Public\Desktop\%%G"

Вышеприведенное сопоставляет сервер/общий ресурс, на котором временно находятся файлы, затем использует цикл «For/F», чтобы получить имена файлов, а затем удалить их.

del "%~dp0ShortcutList_%date:~-4,4%%date:~-7,2%%date:~-10,2%.txt"

Наконец, эта строка удалила созданный текстовый файл.

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

%date:~-4,4%%date:~-7,2%%date:~-10,2%

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

Пожалуйста, поправьте меня, если я ошибаюсь в чем-либо.

person Tom Smith    schedule 17.02.2016