iltmpz
Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Вопрос: а есть какая-нибудь "культура написания батников", чтобы быть уверенным, что он нормально сработает? Хочу поделиться своим опытом: Я хотел отключить сетевую шару я-то наивно предполагал, что если я запущу ночью в планировщике bat-ник с такой командой: Код: net share foldername /delete >> c:\log.txt | то он отключит foldername. Зря я так думал. Он всю ночь провисел с вопросом: Код: Пользователи имеют на foldername открытые файлы. Продолжение операции приведет к закрытию файлов. Продолжить операцию? (Y-да/N-нет) [N]: | Попытка написать "echo y | net share foldername /delete" привела к тому, что он просто ответил: Код: Не был получен допустимый отклик. | Мало того: в тот же c:\log.txt перенаправлялись другие команды батника, так они просто игнорировались со словами: Код: Процесс не может получить доступ к файлу, так как этот файл занят другим процессом. | (странное поведение ОС), ладно бы команды выполнились, а вывод результата потерялся, а нет, оказалось, что оно работает именно так. В результате методом тыка я понял, что надо было написать "net share foldername /delete /y" (хотя "net help share" и доки ни о чем таком не говорят). Собственно о сути моего вопроса: Я хочу "написать батник и спать спокойно", пребывая в уверенности, что он будет выполнен, даже если то, что из него вызывалось, будет глючить. Причем по логам хочу установить, что конкретно глючило. Поэтому я хочу услышать мнения, кто что думает о культуре написания батников: 1. Когда это возможно, писать абсолютные пути. 2. в начале и в конце каждого батника писать: Код: echo имя_файла started/finished >> c:\log.txt date /t >> c:\log.txt time /t >> c:\log.txt | 3. Из-за Код: Процесс не может получить доступ к файлу, так как этот файл занят другим процессом. | для каждого вызова программы придется делать ">>c:\log1.txt", ">>c:\log2.txt" и т.п. а потом склеивать их: "copy c:\log.txt + c:\log1.txt" правда при этом система сильно усложняется, и это вызовет дополнительную путаницу. 4. Можно ли как-то в общем случае отучить его задавать "очень умные" вопросы типа: Код: Продолжить операцию? (Y-да/N-нет) [N]: | мысль 1: на всякий случай вызов каждой программы писать не "prog.exe", а "echo y|prog.exe" или даже "yes.exe|prog.exe". Это иногда поможет ответить "y", иногда хотя бы просто предотвратит зависание. Иногда правда это не помогает 5. Активнее использовать taskkill если программа может зависнуть, а она занимает ресурсы, которые могут быть нужны в дальнейшем. И т.д. Если такое нигде раньше не обсуждалось, список было бы здорово дополнять, а, чтобы он не утонул, поместить его в шапку этой темы. |