Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Зависание виртуальной машины после запуска батника

Ответить
Настройки темы
CMD/BAT - [решено] Зависание виртуальной машины после запуска батника

Аватара для ZeroCrash

Пользователь


Сообщения: 62
Благодарности: 1


Конфигурация

Профиль | Отправить 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="
При его запуске ID меняется, но система полностью виснет либо сразу, либо при попытке каких-либо действий.
При запуске на моём компе всё работает нормально.
Вот ссылка на прогу: VolumeID
Я не знаю в чём причина, если виноват не батник и я разместил тему не в том разделе, то подскажите пожалуйста.

-------
Я НЕвкотакте!

Это сообщение посчитали полезным следующие участники:

Отправлено: 21:59, 01-07-2009

 

Старожил


Сообщения: 426
Благодарности: 108

Профиль | Отправить PM | Цитировать


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

Попробуйте посмотреть следующее:

1. Основная часть программы просто вызывает Процедуру в 3й строке и выходит и скрипта.
Функция городит "серийник" для тома, устанавливает его и... выходит из скрипта вместо выхода из процедуры!
Насколько я помню, для выхода из процедуры необходимо использовать exit /b [code] вместо просто выхода.
Опять же (это ни в коей мере не мешает, но...) висят неиспользуемые процедуры dword, set и unset (последняя даже без выхода - просто конец скрипта)

2. Перечисление в цикле через запятую вроде отрабатывается корректно, но я бы не рисковал и заменил на пробелы (по-старинке).

3. Я не могу назвать нынешний интерпретатор батников достаточно устойчивым и адекватным. Все, что ему не нравится, но молча проглатывается, на мой взгляд "накапливается" и в какой-то момент вываливается непонятным багом, например, я одно время писал команды в скобках с отступом пробелом или более (для красоты), но в некоторых случаях я в результате получал ошибку выполнения комады, которой не было в скрипте вообще, а сама команда была всего лишь фрагментом содержимого одной из переменных. Поэтому будте более строги к оформлению.

-------
Как сказало Дерево Дровосеку: "я - пень".


Последний раз редактировалось NiOl, 08-07-2009 в 13:49. Причина: орфография

Это сообщение посчитали полезным следующие участники:

Отправлено: 13:46, 08-07-2009 | #2



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

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для ZeroCrash

Пользователь


Сообщения: 62
Благодарности: 1

Профиль | Отправить 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%
Вот такой код работает, но только на моей машине. А после запуска на виртуальной, после его выполнения винда на вирте виснет. Если убрать setlocal enabledelayedexpansion, то всё норм работает, но значение всегда с4с4-с4с4 Что делать???

-------
Я НЕвкотакте!


Отправлено: 22:45, 12-07-2009 | #3


Старожил


Сообщения: 426
Благодарности: 108

Профиль | Отправить 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


Аватара для ZeroCrash

Пользователь


Сообщения: 62
Благодарности: 1

Профиль | Отправить PM | Цитировать


NiOl, буду пробовать твой код. Нужна последовательность: буква-цифра

-------
Я НЕвкотакте!


Отправлено: 18:49, 13-07-2009 | #5


Старожил


Сообщения: 426
Благодарности: 108

Профиль | Отправить PM | Цитировать


Цитата ZeroCrash:
Нужна последовательность: буква-цифра »
пжалста:
Код: Выделить весь код
@Echo off
SetLocal EnableDelayedExpansion
SetLocal EnableExtensions

set VL=
set HEX=ABCDEF
for /L %%n in (1,1,4) do (
set /A N=!random!
set /A "C=!N!-((!N!/6)*6)"
call set VL=!VL!%%HEX:~!C!,1%%%%N:~-1%%
if %%n==2 set VL=!VL!-
)
echo %VL%

-------
Как сказало Дерево Дровосеку: "я - пень".


Отправлено: 19:12, 13-07-2009 | #6


Аватара для ZeroCrash

Пользователь


Сообщения: 62
Благодарности: 1

Профиль | Отправить PM | Цитировать


NiOl,
Код: Выделить весь код
1 c: %x-1%%y-1%%x-2%%y-2%-%x-3%%y-3%%x-4%%y-4%
1 это программа, которая меняет ID диска, мой код справлялся со своей задачей (подставить сгенерированный номер в прогу) а твой код этого не делает.

-------
Я НЕвкотакте!


Отправлено: 20:59, 15-07-2009 | #7


Старожил


Сообщения: 426
Благодарности: 108

Профиль | Отправить PM | Цитировать


Цитата ZeroCrash:
1 это программа, которая меняет ID диска, мой код справлялся со своей задачей (подставить сгенерированный номер в прогу) а твой код этого не делает. »
Прошу уточнить один момент - я выложил 2 пакетных файла, которые только генерят и показывают переменную %VL%, без дисковых операций.

В первом случае это будет полностью случайная последовательность вида (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


Аватара для ZeroCrash

Пользователь


Сообщения: 62
Благодарности: 1

Профиль | Отправить PM | Цитировать


NiOl, батник работает, но проблема осталась не решенной. Виртуальная машина по прежнему виснет, а следовательно различий между мим батником и твоим нету, т.к. функциональность осталась прежней.

-------
Я НЕвкотакте!


Отправлено: 23:06, 15-07-2009 | #9


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


ZeroCrash, по ходу проблема не в батнике, а в "программе, которая меняет ID диска", вручную то хоть меняет?.. или подставьте перед командой замены оператор "@Echo " - вместо выполнения на экран будет выведен текст команды

Отправлено: 03:07, 16-07-2009 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Зависание виртуальной машины после запуска батника

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Не работает образ sysprep с виртуальной машины megasecure Автоматическая установка Windows 2000/XP/2003 1 11-02-2009 09:10




 
Переход