![]() |
Зависание виртуальной машины после запуска батника
Вот код батника, который через программу VolumeID меняет ID логического диска:
Код:
@echo off При запуске на моём компе всё работает нормально. Вот ссылка на прогу: VolumeID Я не знаю в чём причина, если виноват не батник и я разместил тему не в том разделе, то подскажите пожалуйста. |
Пробежал глазками, не совсем понимаю необходимость такой сложности генерации метки тома, ну да ладно...
Попробуйте посмотреть следующее: 1. Основная часть программы просто вызывает Процедуру в 3й строке и выходит и скрипта. Функция городит "серийник" для тома, устанавливает его и... выходит из скрипта вместо выхода из процедуры! Насколько я помню, для выхода из процедуры необходимо использовать exit /b [code] вместо просто выхода. Опять же (это ни в коей мере не мешает, но...) висят неиспользуемые процедуры dword, set и unset (последняя даже без выхода - просто конец скрипта) 2. Перечисление в цикле через запятую вроде отрабатывается корректно, но я бы не рисковал и заменил на пробелы (по-старинке). 3. Я не могу назвать нынешний интерпретатор батников достаточно устойчивым и адекватным. Все, что ему не нравится, но молча проглатывается, на мой взгляд "накапливается" и в какой-то момент вываливается непонятным багом, например, я одно время писал команды в скобках с отступом пробелом или более (для красоты), но в некоторых случаях я в результате получал ошибку выполнения комады, которой не было в скрипте вообще, а сама команда была всего лишь фрагментом содержимого одной из переменных. Поэтому будте более строги к оформлению. |
Код:
setlocal enabledelayedexpansion |
Может генератор по-проще сделать?
Какой конечный внешний вид метки желателен, в смысле какие пожелания к цифрам на выходе - совершенно любая последовательность из 4 байт? Попробуй так: @Echo off SetLocal EnableDelayedExpansion SetLocal EnableExtensions set VL= set HEX=0123456789ABCDEF for /L %%n in (1,1,8) do ( set /A "C=!random! & 15" call set C=%%HEX:~!C!,1%% set VL=!VL!!C! if %%n==4 set VL=!VL!- ) echo %VL% |
NiOl, буду пробовать твой код. Нужна последовательность: буква-цифра
|
Цитата:
Код:
@Echo off |
NiOl,
Код:
1 c: %x-1%%y-1%%x-2%%y-2%-%x-3%%y-3%%x-4%%y-4% |
Цитата:
В первом случае это будет полностью случайная последовательность вида (3 запуска дали мне следующие последовательности): 1734-2655 E7DE-121B F3E7-B563 Во втором - последовательности с учетом пожеланий (буква-цифра): A6B9-C8E2 D9D7-C4F7 D3D5-E8D5 Все, что нужно - в конце пакетного файла вывод на экран echo %VL% заменить на VolumeID c: %VL% Дело в том, что у меня этой проги (VolumeID) нет и я в примерах просто вывел результат на экран, никаких операций над диском не производя. т.е. в чистом виде мои батники метку диска менять не станут. Нужно добавить ВАШУ команду к конец каждого пакетного файла, как в примере выше. |
NiOl, батник работает, но проблема осталась не решенной. Виртуальная машина по прежнему виснет, а следовательно различий между мим батником и твоим нету, т.к. функциональность осталась прежней.
|
ZeroCrash, по ходу проблема не в батнике, а в "программе, которая меняет ID диска", вручную то хоть меняет?.. или подставьте перед командой замены оператор "@Echo " - вместо выполнения на экран будет выведен текст команды
|
amel27, попробовал вручную.....действительно виснет и без батника.....хотя раньше я в ручную делал и нечего не висло..... на реальной машине всё норм.....
|
ZeroCrash, тогда тебе в другую ветку... например, сюды: Microsoft Virtual PC
|
amel27, у меня WMware стоит, ладно, крою тему. Всем спасибо!
|
Время: 15:27. |
Время: 15:27.
© OSzone.net 2001-