Запуск .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
Запускаем и радуемся, что теперь винда не ругается при запуске батника из шары и ничего не меняет;)

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

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

  1. Анонимный says:

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

    Анонимный says:

    Огромное спасибо за "%~dp0", нужно было банальный батник создать с копированием файлов по сети для дебилов, с твоей помощью всё заработало :)

    Анонимный says:

    "Путь откуда был запущен наш батник, то есть директорию запуска бат файла, можно получить через
    %~dp0"

    И как прикажите сие понимать ?
    Афтар поконкретней можно ?

    Анонимный says:

    Автору спасибо
    Выручил

    Анонимный says:

    вот человек умница! Спасибо огромное!

    Анонимный says:

    Спасибо!! Офигенно помогло))

    Гм, после применения этого твика надо перезагрузить компьютер или нет?

    Анонимный says:

    Спасибо сегодня помогло батники для тундербирда написать

    Анонимный says:

    Спасибо, тоже мучался, до этого через net use y: //%~dp0

    а оказывается проще :)
    %~dp0file.msi ))

    Анонимный says:

    спасибо огромное, очень помогло :)

    Unknown says:

    оченно пригодилось, спасибо. Всем же любопытствующим - это составной аргумент:
    1. "%" - предваряет номер получаемого аргумента
    2. "~d" - директива извлечения буквы диска, откуда запущен батник
    3. "~p" - директива извлечения пути без номера диска к батнику
    4. "0" - нулевой агумент, полный путь к запуску батника вместе с его именем.
    Таким образом получаем полный путь, затем из него последовательно извлекается диск и путь после диска, но без имени самого батника.
    Подробности можно смотреть в командной строке "for /?".

    Уф-ф, многабуков.

    Анонимный says:

    здоровья тебе человек!!! Крепкого!!1 Пиши пиши!! Не сдерживай себя!! СПАСИБО!! Сэкономил пару часов рабочего времени и нервов!! Здоровья тебе и детям твоим! :)

    Unknown says:

    Спасибо за статью, пригодилась. Использовал второй вариант с реестром, только я прописал значение тут
    HKLM\Software\Microsoft\Command Processor
    Т.к. это терминальник, пользователей много.

    Вообще странная штука, если пользователя авторизовал DC01(Win2012R2), то скрипты отрабатывают нормально, диски цепляются, базы в 1с прописываются, а если пользователь авторизовался на DC02 (Win2k8R2), то хрен там булькал, как раз вылезает ошибка про UNC пути и т.д. Терминальник Win2012R2.

    Unknown says:
    Этот комментарий был удален администратором блога.

    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!

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

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

Powered by Blogger