ComradG

Silver Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору несколькими месяцами ранее я задавался вопросом можно ли с помощью батника создавать ярлыки, просматривать zip-архивы и тому подобным. у меня были наработки по теме, но я тогда я их отправил в стол, а ныне, разбирая старые записи, у меня все четче вырисовывался план, согласно которому можно обыграть некоторые ограничения командных сценариев, скрестив их с cscript, тем самым унифицировав систему администрирования: ведь многие не спешат использовать PowerShell в виду того, что многим он представляется довольно сложным в освоении (хотя это не так), да и не всегда имеется возможность использовать сторонние утилиты вроде sed или tail, имитацию - правда весьма урезанную, - можно представить в виде сценариев cscript. но давайте перейдем от слов к делу. что я предлагаю? те, кто ни разу не работал с cscript'ом, возможно будут несколько озадачены, увидев батник, например, такого содержания: Код: @set @script=1 /* @echo off set @script= cscript //nologo //e:jscript "%~dpnx0" %* exit /b */ WScript.echo("Это сценарий cscript вызванный из батника."); | здесь все довольно-таки просто: командный интерпретатор может корректно перемалоть сценарий начиная со второй по пятую строку, чем он и занимается, попутно скармливая себя интерпретатору cscript, для которого в свою очередь все за знаком /* является комментарием. стоит также заметить, что вывод echo команды перестает быть головной болью переключения на люсиду и набором chcp 1251 - набранный текст будет корректно отображаться в консоли. в общем, если что непонятно, то просьба справляться с msdn, а я же приведу еще пару примеров. так мы можем создавать ярлыки: Код: @set @script=1 /* @echo off set @script= cscript //nologo //e:jscript "%~dpnx0" %* exit /b */ var wsh, desktop, shortcut; wsh = WScript.CreateObject("WScript.Shell"); desktop = wsh.SpecialFolders("Desktop"); shortcut = wsh.CreateShortcut(desktop + "\\" + "Notepad.lnk"); shortcut.TargetPath = "C:\\WINDOWS\\notepad.exe"; shortcut.Description = "MS Блокнот"; shortcut.Save(); | или же просматривать содержимое zip-архивов: Код: @set @script=1 /* @echo off set @script= cscript //nologo //e:jscript "%~dpnx0" %* exit /b */ arcname = WScript.Arguments.Item(0); function ZipView(arcname) { var app, fso, fName, items, file; app = new ActiveXObject("Shell.Application"); fso = new ActiveXObject("Scripting.FileSystemObject"); try { fName = fso.GetFile(arcname).Path; items = new Enumerator(app.Namespace(fName).Items()); for (; !items.atEnd(); items.moveNext()) { file = items.item(); WScript.echo(file.Path + " - " + file.Type); } } catch (e) { WScript.echo("Ошибка: " + e.message); } } ZipView(arcname); | а вывод списка жестких дисков таким образом становится еще проще, чем через wmic: Код: @set @script=1 /* @echo off set @script= cscript //nologo //e:jscript "%~dpnx0" %* exit /b */ function GetDriveList() { var fso, enm, drv; fso = new ActiveXObject("Scripting.FileSystemObject"); enm = new Enumerator(fso.Drives); for (; !enm.atEnd(); enm.moveNext()) { drv = enm.item(); if (drv.DriveType == 2) { WScript.echo(drv.DriveLetter + ":\\"); } } } GetDriveList(); |
|