Запуск .bat файла из сетевой папки

Был скрипт, который в тихом (silent) режиме ставил некоторый пакет программ, удалял предыдущие, накатывал обновления. Тестировалось всё это дело либо на локальном диске либо на сетевой шаре подключенной как диск(через net use). Все работало замечательно, пока не попробывали запустить батник напрямую из шары и тут нам выдало нелицеприятное:

Указанный путь был использован при запуске CMD.EXE в качестве текущей папки. CMD.EXE не поддерживает пути UNC. По умолчанию выбрана системная папка Windows.
И всё сломалось)) Теперь для батника текущая директория сменилась, была не та из которой он запущен (например \\server\data\),а стала С:\Windows, если мы выполним в этом скрипте dir, то нам выведется листинг системной папки винды) Соотвественно если в скрипте стоял запуск с относительными путями типа
Msiexec /I Install\setup.msi /qb
то установщик ничего не найдет(в системной папке ничего такого же нет!) и хорошенько ругнется;) А если у Вас стояла команда удаления файлов в текущей директории, хехе, то тут надо быстрее жать Ctrl+C иначе будет очень больно)))

Решения
данной проблемки нашлось два:

1. Указывать абсолютные пути
Путь откуда был запущен наш батник, то есть директорию запуска бат файла, можно получить через
%~dp0
В ней содержится строка вида "\\server\something\", таким образом надо дополнить запуск программ или еще чего что делает ваш скриптик:
Msiexec /I "%~dp0Install\setup.msi" /qb
1.1 Очень похож по методу на первый, с той лишь разницей что мы принудительно меняем каталог на тот из которого был запущен батник:
Msiexec /I "cd "%~dp0"
И таким образом можно опять использовать относительные пути

2. Заставить винду не ругаться на сетевые пути и не менять текущий каталог
В этом случае надо поправить кое-что в реестре, а именно выставить DisableUNCCheck в единичку. Создаем файл с расширением .reg и копируем туда этот текст:
REGEDIT4

[HKEY_CURRENT_USER\Software\Microsoft\Command Processor]
"DisableUNCCheck"=dword:00000001
Запускаем и радуемся, что теперь винда не ругается при запуске батника из шары и ничего не меняет;)

Надеюсь кому-нить пригодится))

Клонирование дисков VirtualBox

Иногда бывает необходимость в создании еще одной виртуальной машины идентичной существующей. Для этого мы копируем диск (vdi) в другое место, но просто так добавить его через "Менеджер виртуальных носителей" нам не удастся, так как такой uuid диска уже есть: Чтобы присвоить новый uuid нам надо воспользоваться недокументированной командой

"C:\Program Files\Sun\xVM VirtualBox\VBoxManage.exe" internalcommands sethduuid newHardDisk.vdi
И всё, мы можем легко добавлять этот диск через "Менеджер виртуальных носителей". Затем создаем новую виртуальную машину, скармливая добавленный диск и вуаля, машина склонированна;)

Яндекс.Метрика

Код отслеживания Google Analytics

Powered by Blogger