Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Проблема с Java Script (http://forum.oszone.net/showthread.php?t=308582)

svoboda1984 30-11-2015 00:05 2579946

Проблема с Java Script
 
Задача: Организовать вывод информации о ЖД.

@set @x=0 /*;
@echo off
SetLocal EnableExtensions EnableDelayedExpansion

for /F "skip=1 tokens=1-2" %%A in ('WMIC DiskDrive get Model^,Size^') do (
set name=%%A
set tmp=%%B& call :_Math !tmp!
set size=!Result!
echo Дисковый накопитель: !name! Обьём: !size! Gb>>1.txt
)

:_Math
set Result=
for /F "tokens=1-2 delims=," %%A in ('Cscript //nologo /e:jscript "%~f0" "%~1" "Div" "1073741824"') do (
set tmp=%%B& set old=!tmp:~0,2!
set "Result=%%A,!old!"
)
exit /b
*/try {
switch (WScript.Arguments(1)) {
case "Div":
WScript.Echo (+WScript.Arguments(0) / +WScript.Arguments(2)); break;
}
} catch (e) { }

На выходе получается такое: ST1000DM003-9YN162 ЋЎмс¬: -1,#I Gb
Не показывает необходимый выход в ГБ. Очень плохо знаком с JS, прошу помочь. Никак не разобраться.

svoboda1984 30-11-2015 00:29 2579948

Я так понимаю, что он по своему распознаёт строку Size, Но вот что интересно, при данной обработке LogicalDisk аналогичной строки Size - всё прекрасно отрабатывает. Вообще WMIC живёт какой-то своей жизнью, и всё в нём непросто. Советов множество, но все они индивидуальны, для решения одной проблемы подходят, а для решения другой, но аналогичной уже не работают.

Iska 30-11-2015 01:44 2579956

«wmic.exe» тут совершенно не причём. Сделайте вывод:
Код:

wmic.exe DiskDrive get Model, Size
Совет будет только один: переходите на WSH (VBScript/JScript/etc) или PowerShell. Смесь французского с нижегородским имеет право на жизнь, но только тогда, когда сам хорошо разбираешься и в том, и в другом.
WSH
Код:

For Each objSWbemObjectEx In GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2").ExecQuery("SELECT Model, Size FROM Win32_DiskDrive")
        WScript.Echo "Дисковый накопитель: " & objSWbemObjectEx.Model & " Обьём: " & FormatNumber(objSWbemObjectEx.Size / (2^30), 2) & " Gb"
Next

PowerShell
Код:

Get-WmiObject -Class Win32_DiskDrive | ForEach-Object -Process {
    "Дисковый накопитель: {0} Обьём: {1:n} Gb" -f $_.Model, $($_.Size / 1Gb)
}


svoboda1984 30-11-2015 07:09 2579977

Iska, спасибо. Уже запустил ps1 из батника, отрабатывает отлично. Буду применять такой приём при возникновении типичных ошибок. Переходить пока не хочу, ибо bat для меня более логичен, проще воспринимается. Но параллельно изучаю и другие методы, в частности js, vbs, ps. Вообще если применять их параллельно, можно автоматизировать практически любой процесс в винде. И главное это интересно, хоть и смахивает порой на головоломку.


Время: 13:38.

Время: 13:38.
© OSzone.net 2001-