Запуск .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" /qb1.1 Очень похож по методу на первый, с той лишь разницей что мы принудительно меняем каталог на тот из которого был запущен батник:
Msiexec /I "cd "%~dp0"И таким образом можно опять использовать относительные пути
2. Заставить винду не ругаться на сетевые пути и не менять текущий каталог
В этом случае надо поправить кое-что в реестре, а именно выставить DisableUNCCheck в единичку. Создаем файл с расширением .reg и копируем туда этот текст:
REGEDIT4Запускаем и радуемся, что теперь винда не ругается при запуске батника из шары и ничего не меняет;)
[HKEY_CURRENT_USER\Software\Microsoft\Command Processor]
"DisableUNCCheck"=dword:00000001
Надеюсь кому-нить пригодится))
респект и уважуха тебе, чувак. огромное спасибо за подсказку. я полдня бился над этой проблемой а оказалось все так просто
Огромное спасибо за "%~dp0", нужно было банальный батник создать с копированием файлов по сети для дебилов, с твоей помощью всё заработало :)
"Путь откуда был запущен наш батник, то есть директорию запуска бат файла, можно получить через
%~dp0"
И как прикажите сие понимать ?
Афтар поконкретней можно ?
Автору спасибо
Выручил
вот человек умница! Спасибо огромное!
Спасибо!! Офигенно помогло))
Гм, после применения этого твика надо перезагрузить компьютер или нет?
Спасибо сегодня помогло батники для тундербирда написать
Спасибо, тоже мучался, до этого через net use y: //%~dp0
а оказывается проще :)
%~dp0file.msi ))
спасибо огромное, очень помогло :)
оченно пригодилось, спасибо. Всем же любопытствующим - это составной аргумент:
1. "%" - предваряет номер получаемого аргумента
2. "~d" - директива извлечения буквы диска, откуда запущен батник
3. "~p" - директива извлечения пути без номера диска к батнику
4. "0" - нулевой агумент, полный путь к запуску батника вместе с его именем.
Таким образом получаем полный путь, затем из него последовательно извлекается диск и путь после диска, но без имени самого батника.
Подробности можно смотреть в командной строке "for /?".
Уф-ф, многабуков.
здоровья тебе человек!!! Крепкого!!1 Пиши пиши!! Не сдерживай себя!! СПАСИБО!! Сэкономил пару часов рабочего времени и нервов!! Здоровья тебе и детям твоим! :)
Спасибо за статью, пригодилась. Использовал второй вариант с реестром, только я прописал значение тут
HKLM\Software\Microsoft\Command Processor
Т.к. это терминальник, пользователей много.
Вообще странная штука, если пользователя авторизовал DC01(Win2012R2), то скрипты отрабатывают нормально, диски цепляются, базы в 1с прописываются, а если пользователь авторизовался на DC02 (Win2k8R2), то хрен там булькал, как раз вылезает ошибка про UNC пути и т.д. Терминальник Win2012R2.
The Wizard of Oz Hotel & Casino - JamBase
Visit The Wizard's 남원 출장안마 website 의정부 출장마사지 for details of all the casino table games, 경기도 출장마사지 including Blackjack, Poker, Roulette, Video 동두천 출장샵 Poker and 김제 출장마사지 many more!