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

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

SANIOK_AV 15-09-2011 16:14 1753604

Запрос для wmic
 
Доброго времени суток!
В батнике в зависимости от текущего времени (до 10 утра или после) выполняется или не выполняется определённый блок:
Код:

wmic.exe path Win32_LocalTime where (Hour^<10) get Hour 2>nul|find.exe /i "Hour">nul && goto :Skip
echo privet
:Skip

Но я хотел бы чтоб этот блок выполнялся, к примеру, после 10 часов 45 минут.
Условие для данного примера я как бы себе представляю:
Код:

(Hour<10 or (Hour=10 and Minute<45))
Но вот как правильно это записать для wmic.exe ? :idontnow:
Заранее благодарен!

Foreigner 15-09-2011 16:39 1753621

SANIOK_AV,
Цитата:

чтоб этот блок выполнялся, к примеру, после 10 часов 45 минут.
Будет выполняться после 10:45
Код:

... where (hour=10 and minute^>45 or hour^>=11) get ....

SANIOK_AV 16-09-2011 13:33 1754262

Foreigner, Спасибо большое, работает!

P.S.: как вариант можно ещё так:
Код:

set /a t = %time::=% 
if %t% leq 104500 goto :Skip
echo privet
:Skip


sov44 25-06-2012 16:55 1940286

Подскажите, как с помощью wmic определить буквы логических дисков, не выводя буквы дисков, занятых флеш накопителями?

Iska 25-06-2012 17:14 1940292

sov44, определить непосредственно USB Flash — вряд ли. А так — пробуйте:
Код:

wmic.exe LogicalDisk where "DriveType = 3 AND MediaType=12" get DeviceID
Win32_LogicalDisk class

sov44 25-06-2012 17:41 1940308

Iska, код подошел. Необходимо вывести в переменную буквы дисков. У меня не получается
Код:

@echo off
SetLocal enabledelayedexpansion
For /F %%A In (wmic.exe LogicalDisk where "DriveType = 3 AND MediaType=12" get DeviceID) Do (
set dr=%%A
echo !dr!
)
pause


Iska 25-06-2012 18:02 1940327

Например, так:
Код:

@echo off
setlocal enableextensions enabledelayedexpansion

for /f "usebackq skip=1" %%i in (`wmic.exe LogicalDisk where "DriveType = 3 AND MediaType=12" get DeviceID`) do (
        set sDriveName=%%i
        echo [!sDriveName!]
)

endlocal
exit /b 0


sov44 07-08-2012 21:33 1966457

Пробую с помощью WMIC определить наличие вставленной флешки, не получается
Код:

@echo off
setlocal enableextensions enabledelayedexpansion

for /f "usebackq skip=1" %%i in (`wmic.exe LogicalDisk where "DriveType=2 And MediaType=NULL" get VolumeName`) do (
findstr.exe /r /c:"^Отсутствуют экземпляры класса.&" >nul &&(echo флешка не вставлена) || (set sDriveName=%%i& echo !sDriveName!)
)
pause
endlocal
exit /b

п.с. можно ли сделать подобное без wmic? (прав администратора может не быть)

Foreigner 07-08-2012 22:44 1966508

Цитата:

Цитата sov44
Пробую с помощью WMIC определить наличие вставленной флешки, не получается »

А зачем MediaType?

Код:

@echo off
setlocal

set "wmic=2>nul wmic logicaldisk where drivetype=2 get volumename /value"

for /f %%i in (' "%wmic%" ') do 1>nul set "%%i"

if not defined volumename (echo usb-flash is not inserted) else (echo label is %volumename%)


sov44 07-08-2012 23:19 1966526

Цитата:

Цитата Foreigner
А зачем MediaType? »

Прочитал тут
Foreigner, если флешка не вставлена, пишет "echo label is "

Foreigner 07-08-2012 23:30 1966532

sov44, а ты просто введи команды:
Код:

wmic logicaldisk where drivetype=2 get * /value

и

set volumename

Что напишет?

sov44 07-08-2012 23:43 1966540

Цитата:

Цитата Foreigner
Что напишет? »

читать дальше »
Access=
Availability=
BlockSize=
Caption=A:
Compressed=
ConfigManagerErrorCode=
ConfigManagerUserConfig=
CreationClassName=Win32_LogicalDisk
Description=Дисковод 3,5 дюйма
DeviceID=A:
DriveType=2
ErrorCleared=
ErrorDescription=
ErrorMethodology=
FileSystem=
FreeSpace=
InstallDate=
LastErrorCode=
MaximumComponentLength=
MediaType=5
Name=A:
NumberOfBlocks=
PNPDeviceID=
PowerManagementCapabilities=
PowerManagementSupported=
ProviderName=
Purpose=
QuotasDisabled=
QuotasIncomplete=
QuotasRebuilding=
Size=
Status=
StatusInfo=
SupportsDiskQuotas=
SupportsFileBasedCompression=
SystemCreationClassName=Win32_ComputerSystem
SystemName=1-7BC79D2011CC4
VolumeDirty=
VolumeName=
VolumeSerialNumber=

переменная среды volumename не определена


что я должен увидеть?

Foreigner 08-08-2012 00:01 1966548

Значит drivetype 2 не подойдет, т.к. он еще прихватывает дисковод

Попробуй изменить запрос на:
Код:

set "wmic=2>nul wmic logicaldisk where (drivetype=2 and caption!="A:") get volumename /value"

sov44 25-03-2014 16:44 2328417

Подскажите, как вывести список разделов жёстких дисков локального компьютера? Сетевые диски не выводить.

Petya V4sechkin 25-03-2014 17:41 2328424

Цитата:

Цитата sov44
как вывести список разделов жёстких дисков локального компьютера?

Ответ был дан в сообщении 5 (и вы даже отметили его полезным в 2012 году).

sov44 25-03-2014 20:58 2328504

Спасибо! Заблудился в трёх соснах :) А как вывести список разделов жёстких дисков без сетевых, если в системе нет wmic?

Iska 25-03-2014 23:50 2328577

Использовать WSH/PoSH. Если хотите остаться в рамках а) одного и б) пакетного файла — можно попробовать использовать командную строку в «mshta.exe»:
Код:

@echo off
setlocal

for /f "tokens=2 delims=:" %%i in ('chcp') do (
    set sPrevCP=%%i
    chcp 1251 >nul
)

for /f "usebackq delims=" %%i in (
    `@"%systemroot%\system32\mshta.exe" "javascript:var enumItems = new Enumerator(new ActiveXObject('WbemScripting.SWbemLocator').ConnectServer('.', 'root\\CIMV2').ExecQuery('SELECT DeviceID FROM Win32_LogicalDisk WHERE DriveType = 3 AND MediaType = 12')); for(; ^!enumItems.atEnd(); enumItems.moveNext()) {try {new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1).WriteLine(enumItems.item().DeviceID)} catch (e){}} close();" ^
    1^|more`
) do echo [%%i]

chcp %sPrevCP% >nul

endlocal
exit /b 0


sov44 26-03-2014 00:37 2328603

Iska, на xp код не сработал. http://savepic.su/4249951.jpg

Iska 26-03-2014 01:51 2328626

Цитата:

Цитата sov44
Iska, на xp код не сработал. »

Цитата:

Код:

Microsoft Windows XP [Версия 5.1.2600]
(С) Корпорация Майкрософт, 1985-2001.

E:\Песочница\0369>0008.cmd
[C:]
[D:]
[E:]
[F:]
[H:]
[N:]

E:\Песочница\0369>


Ощущение такое, что там WMI вообще вырезан. Такой скрипт vbscript:
читать дальше »
Код:

Option Explicit

Dim objSWbemServicesEx

Set objSWbemServicesEx = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")

WScript.Echo TypeName(objSWbemServicesEx)

WScript.Quit 0


исполняется?

sov44 26-03-2014 07:01 2328659

Цитата:

Цитата Iska
Такой скрипт vbscript..исполняется?

http://savepic.su/4246864.jpg

На другой машине с ХР аналогичная ошибка при запуске батника. Может не по феншую запускаю? :dont-know Iska, если не затруднит, выложите батник.

Iska 26-03-2014 09:32 2328696

Так. Стало интереснее.

Возвращаемся к mshta:
Код:

@echo off
setlocal

for /f "tokens=2 delims=:" %%i in ('chcp') do (
    set sPrevCP=%%i
    chcp 1251 >nul
)

for /f "usebackq delims=" %%i in (
    `@"%systemroot%\system32\mshta.exe" "javascript:var enumItems = new Enumerator(GetObject('winmgmts:{impersonationLevel=impersonate}^!\\\\.\\root\\cimv2').ExecQuery('SELECT DeviceID FROM Win32_LogicalDisk WHERE DriveType = 3 AND MediaType = 12')); for(; ^!enumItems.atEnd(); enumItems.moveNext()) {try {new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1).WriteLine(enumItems.item().DeviceID)} catch (e){}} close();" ^
    1^|more`
) do echo [%%i]

chcp %sPrevCP% >nul

endlocal
exit /b 0

Что теперь?

sov44 26-03-2014 10:29 2328721

Цитата:

Цитата Iska
Что теперь? »

синтаксическая ошибка, строка 1 символ 206

Iska 26-03-2014 10:45 2328737

Скриншот ошибки можно?

Georgio 26-03-2014 11:00 2328755

Iska, sov44, не поверите: убрал всё "лишнее", включая "^" перед "!", -- пакетные файлы сработали.


Код:

@echo off
setlocal

for /f "tokens=2 delims=:" %%i in ('chcp') do (
    set sPrevCP=%%i
    chcp 1251 >nul
)

for /f "usebackq delims=" %%i in (`mshta "javascript:var enumItems = new Enumerator(new ActiveXObject('WbemScripting.SWbemLocator').ConnectServer('.', 'root\\CIMV2').ExecQuery('SELECT DeviceID FROM Win32_LogicalDisk WHERE DriveType = 3 AND MediaType = 12')); for(; !enumItems.atEnd(); enumItems.moveNext()) {try {new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1).WriteLine(enumItems.item().DeviceID)} catch (e){}} close();"`) do echo [%%i]

chcp %sPrevCP% >nul
pause>nul
endlocal
exit /b 0


Код:

@echo off
setlocal

for /f "tokens=2 delims=:" %%i in ('chcp') do (
    set sPrevCP=%%i
    chcp 1251 >nul
)

for /f "usebackq delims=" %%i in (`mshta "javascript:var enumItems = new Enumerator(GetObject('winmgmts:{impersonationLevel=impersonate}!\\\\.\\root\\cimv2').ExecQuery('SELECT DeviceID FROM Win32_LogicalDisk WHERE DriveType = 3 AND MediaType = 12')); for(; !enumItems.atEnd(); enumItems.moveNext()) {try {new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1).WriteLine(enumItems.item().DeviceID)} catch (e){}} close();"`) do echo [%%i]

chcp %sPrevCP% >nul
pause>nul
endlocal
exit /b 0


Iska 26-03-2014 11:23 2328769

Georgio, а до этого — не работали?

Georgio 26-03-2014 11:53 2328778

Iska, не работали: те же самые ошибки, что и у sov44. А у меня не Windows XP, а Windows 7 Starter. Кстати, с подобной проблемой при использовании разбора вывода каких-то команд "mshta.exe" (каких -- не помню) я уже сталкивался.

sov44 26-03-2014 11:54 2328780

Цитата:

Цитата Georgio
Iska, sov44, не поверите: убрал всё "лишнее", включая "^" перед "!", -- пакетные файлы сработали. »

Подтверждаю, оба кода заработали. Второй код вроде быстрее работает.

Iska, для ликбеза поясните код.

Iska 26-03-2014 17:14 2328915

sov44, а так:
читать дальше »
Код:

@echo off
setlocal enableextensions disabledelayedexpansion

for /f "tokens=2 delims=:" %%i in ('chcp') do (
        set sPrevCP=%%i
        chcp 1251 >nul
)

for /f "usebackq delims=" %%i in (
        `@"%systemroot%\system32\mshta.exe" "javascript:var enumItems = new Enumerator(new ActiveXObject('WbemScripting.SWbemLocator').ConnectServer('.', 'root\\CIMV2').ExecQuery('SELECT DeviceID FROM Win32_LogicalDisk WHERE DriveType = 3 AND MediaType = 12')); for(; ^!enumItems.atEnd(); enumItems.moveNext()) {try {new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1).WriteLine(enumItems.item().DeviceID)} catch (e){}} close();" ^
        1^|more`
) do echo [%%i]

chcp %sPrevCP% >nul

endlocal
exit /b 0


?

Цитата:

Цитата sov44
Второй код вроде быстрее работает. »

Поменяйте их местами — запущенный вторым также будет работать быстрее ;).


Цитата:

Цитата sov44
Iska, для ликбеза поясните код. »

Лучше спросите, что непонятно.

sov44 26-03-2014 19:06 2328963

Цитата:

Цитата Iska
sov44, а так: »

http://savepic.su/4258146.jpg

Iska 26-03-2014 19:27 2328972

Цитата:

Цитата sov44
http://savepic.su/4258146.jpg »

;). Тогда пользуйтесь предложенными выше вариантами коллеги Georgio.


Время: 09:34.

Время: 09:34.
© OSzone.net 2001-