Системное администрирование

Все знают что из cmd скрипта возможно запустить и vbs и js и hta к примеру, возможно ли из vbs вызвать cmd скрипт?!

Из тела скрипта vbs в котором есть cmd строки и я говорю не про такой вариант:
Set WshShell = CreateObject("WScript.Shell")
WshShell.Run "cmd /c команда"

Вообщем vbs скрипт с расширением .vbs должен запустить всего себя же как cmd скрипт.
Возможно такое?!
AA
Anchik Axunov
593
Если синтаксис не запрещает, значит возможно.
Но образуется рекурсивная цепочка вызовов.
И неважно сколько при этом различных языков и функций используется.
Важно лишь то, сумеете ли вы ограничить глубину рекурсии по времени и по объему используемых ресурсов.
Нерекурсивное вычисление факториала в цикле не требует добавления ресурсов памяти и использует на каждом шаге один и тот же фрагмент памяти.
Вызов интерпретатора cmd - требует отведения нового небольшого участка памяти при каждом вызове как при вложенном вызове, так и при единственном вызове. Возвраты из вложенных вызовов cmd осуществляются по принципу первым вошёл, последним вышел.
Рекурсия, которая даже ничего не делает, требует ресурсов и поглощает всю память - авария.
Необходимо, чтобы в рекурсии участвовала какая- то функция, ограничивающая её глубину, и правильно осуществлялся возврат результатов. ..
Работа vbs-скрипта тоже может иметь подобные ограничения, но это уже неважно, потому что один только cmd накладывает принципиальные теоретические ограничения.
Интерпретатор скрипта анализирует только код строки, и не может обозреть всю программу, проверить её правильность и осмысленность, в этом можно убедиться, реализовав вашу мечту с рекурсивным вызовом.
Стоит заметить, что если будет использован алгоритм с созданием файлов, то это запросто замусорит диск, а это очень болезненно.

Что же касается вызова vbs как cmd, то вы знаете способ, как это делать, и этот способ запрограммирован в функции WshShell.Run не зря, потому что работает с единственно верным указателем на адрес загруженной функции, а не на файл в котором она хранится.
И зачем vbs-скрипт должен разбираться с чужим скриптом?
Если выполнить вашу задумку, то надо или в cmd включить всю суть vbs, либо в vbs включить всю суть cmd.
То есть написать другой интерпретатор, потому что не хочется пользоваться одной маленькой функцией WshShell.Run )))
Александр Логинов
Александр Логинов
70 042
Лучший ответ
Anchik Axunov Спасибо за такую развернутую теорию =), но мне хотелось увидеть практический пример какой нибудь если так конечно возможно сделать))
1. Допустим у файла нет расширения
2. Или оно не соответствует формату (Например Vbs а надо что бы его обработало как cmd файл ).
3. Запуск из альтернативного потока - если написать cmd /k :файл то из за ":" вылетит ошибка WshShell.Run смотрит конкретно на расширение файла
Anchik Axunov "То есть написать другой интерпретатор, потому что не" уже тогда проще выучить си++ и писать программы на нем =)))))))
Нет правда надо)) а то я на теме cmd/wsh уже зациклился =(
Порой пытаюсь сделать, невозможное средствами этих интерпретаторов )
Фиг знает.
.vbs скрипт может быть запущен только как .vbs скрипт. Его должен обрабатывать или WSCRIPT.EXE или CSCRIPT.EXE, - в зависимости от того, в каком виде он запускается, в графике или в консоли. А cmd.exe, в свою очередь, обрабатывает файлы .cmd, и не приемлет синтаксис .vbs-скрипта. По сути вы хотите чтобы телевизор вам пропылесосил ковёр, а пылесос транслировал телепередачи.
Поэтому если нужно запустить vbs-скрипт в консоли, то указанный вами вариант через WshShell.Run является единственным. Если нужно в графике - тогда cmd заменяем на WSCRIPT.
Anchik Axunov Вы не правы насчет cmd/vbs и ковров пылесосов
на vbs переухитряться конечно нужно с '[SUB]

А вот на js легко такой пример вам приведу
Содержимое батника который запустит себя как js скрипт:
@set @x=0 /*
Wscript /E:jscript "%~f0"
Exit
*/
WScript.echo("Tak mojno kak vidite");

Или на vbs уже тогда:
Содержимое батника который запустит себя как vbs скрипт:
::'Cscript /E:vbs "%~f0"
msgbox "Tak mojno kak vidite"

А вот наоборот никак не выходит =( т. е что бы vbs себя вызвал как cmd
Anchik Axunov Прикол вот в чем cmd при запуске смотрит расширение фала и его как в Cscript/Wscript не выставишь =(
Cscript /E:VBS СКРИПТ. cmd
Anchik Axunov Вы правы у каждого файла свой синтаксис но у меня получается взаимовыгодный синтаксис который не нарушает синтаксис софайленика )))