|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Зависание виртуальной машины после запуска батника |
|
|
CMD/BAT - [решено] Зависание виртуальной машины после запуска батника
|
Пользователь Сообщения: 62 |
Профиль | Отправить PM | Цитировать Вот код батника, который через программу VolumeID меняет ID логического диска:
@echo off setlocal enabledelayedexpansion call:1 goto:eof :1 for %%i in (1,2,3,4) do ( for %%j in (a,f,d,e,c) do set x_%%i_!random!=%%j for %%j in (1,2,3,4) do set y_%%i_!random!=%%j ) for %%i in (1,2,3,4) do ( for /f "tokens=4 delims=_=" %%j in ('set x_%%i') do set x-%%i=%%j for /f "tokens=4 delims=_=" %%j in ('set y_%%i') do set y-%%i=%%j ) VolumeID c: %x-1%%y-1%%x-2%%y-2%-%x-3%%y-3%%x-4%%y-4% goto:eof :dword for /f "tokens=2 delims==" %%i in ('set l_1') do set "a=%%i" for /f "tokens=2 delims==" %%i in ('set l_2') do set "b=%%i" set "dword=%dword%%a%%b%" for /f "tokens=1 delims==" %%i in ('set l_') do set "%%i=" goto:eof :set set "value_%random%=%~1" goto:eof :unset for /f "tokens=1 delims==" %%i in ('set value_') do set "%%i=" При запуске на моём компе всё работает нормально. Вот ссылка на прогу: VolumeID Я не знаю в чём причина, если виноват не батник и я разместил тему не в том разделе, то подскажите пожалуйста. |
|
------- Отправлено: 21:59, 01-07-2009 |
Старожил Сообщения: 426
|
Профиль | Отправить PM | Цитировать Пробежал глазками, не совсем понимаю необходимость такой сложности генерации метки тома, ну да ладно...
Попробуйте посмотреть следующее: 1. Основная часть программы просто вызывает Процедуру в 3й строке и выходит и скрипта. Функция городит "серийник" для тома, устанавливает его и... выходит из скрипта вместо выхода из процедуры! Насколько я помню, для выхода из процедуры необходимо использовать exit /b [code] вместо просто выхода. Опять же (это ни в коей мере не мешает, но...) висят неиспользуемые процедуры dword, set и unset (последняя даже без выхода - просто конец скрипта) 2. Перечисление в цикле через запятую вроде отрабатывается корректно, но я бы не рисковал и заменил на пробелы (по-старинке). 3. Я не могу назвать нынешний интерпретатор батников достаточно устойчивым и адекватным. Все, что ему не нравится, но молча проглатывается, на мой взгляд "накапливается" и в какой-то момент вываливается непонятным багом, например, я одно время писал команды в скобках с отступом пробелом или более (для красоты), но в некоторых случаях я в результате получал ошибку выполнения комады, которой не было в скрипте вообще, а сама команда была всего лишь фрагментом содержимого одной из переменных. Поэтому будте более строги к оформлению. |
------- Последний раз редактировалось NiOl, 08-07-2009 в 13:49. Причина: орфография Отправлено: 13:46, 08-07-2009 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Пользователь Сообщения: 62
|
Профиль | Отправить PM | Цитировать setlocal enabledelayedexpansion for %%i in (1,2,3,4) do ( for %%j in (a,f,d,e,c) do set x_%%i_!random!=%%j for %%j in (1,2,3,4) do set y_%%i_!random!=%%j ) for %%i in (1,2,3,4) do ( for /f "tokens=4 delims=_=" %%j in ('set x_%%i') do set x-%%i=%%j for /f "tokens=4 delims=_=" %%j in ('set y_%%i') do set y-%%i=%%j ) 1 c: %x-1%%y-1%%x-2%%y-2%-%x-3%%y-3%%x-4%%y-4% |
------- Отправлено: 22:45, 12-07-2009 | #3 |
Старожил Сообщения: 426
|
Профиль | Отправить PM | Цитировать Может генератор по-проще сделать?
Какой конечный внешний вид метки желателен, в смысле какие пожелания к цифрам на выходе - совершенно любая последовательность из 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% |
------- Отправлено: 12:27, 13-07-2009 | #4 |
Пользователь Сообщения: 62
|
Профиль | Отправить PM | Цитировать NiOl, буду пробовать твой код. Нужна последовательность: буква-цифра
|
|
------- Отправлено: 18:49, 13-07-2009 | #5 |
Старожил Сообщения: 426
|
Профиль | Отправить PM | Цитировать Цитата ZeroCrash:
|
|
------- Отправлено: 19:12, 13-07-2009 | #6 |
Пользователь Сообщения: 62
|
Профиль | Отправить PM | Цитировать |
------- Отправлено: 20:59, 15-07-2009 | #7 |
Старожил Сообщения: 426
|
Профиль | Отправить PM | Цитировать Цитата ZeroCrash:
В первом случае это будет полностью случайная последовательность вида (3 запуска дали мне следующие последовательности): 1734-2655 E7DE-121B F3E7-B563 Во втором - последовательности с учетом пожеланий (буква-цифра): A6B9-C8E2 D9D7-C4F7 D3D5-E8D5 Все, что нужно - в конце пакетного файла вывод на экран echo %VL% заменить на VolumeID c: %VL% Дело в том, что у меня этой проги (VolumeID) нет и я в примерах просто вывел результат на экран, никаких операций над диском не производя. т.е. в чистом виде мои батники метку диска менять не станут. Нужно добавить ВАШУ команду к конец каждого пакетного файла, как в примере выше. |
|
------- Последний раз редактировалось NiOl, 15-07-2009 в 21:27. Причина: написал по-подробнее. Отправлено: 21:21, 15-07-2009 | #8 |
Пользователь Сообщения: 62
|
Профиль | Отправить PM | Цитировать NiOl, батник работает, но проблема осталась не решенной. Виртуальная машина по прежнему виснет, а следовательно различий между мим батником и твоим нету, т.к. функциональность осталась прежней.
|
------- Отправлено: 23:06, 15-07-2009 | #9 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать ZeroCrash, по ходу проблема не в батнике, а в "программе, которая меняет ID диска", вручную то хоть меняет?.. или подставьте перед командой замены оператор "@Echo " - вместо выполнения на экран будет выведен текст команды
|
Отправлено: 03:07, 16-07-2009 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Не работает образ sysprep с виртуальной машины | megasecure | Автоматическая установка Windows 2000/XP/2003 | 1 | 11-02-2009 09:10 |
|