Запрос для 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:
Заранее благодарен!
|
SANIOK_AV,
Цитата:
чтоб этот блок выполнялся, к примеру, после 10 часов 45 минут.
|
Будет выполняться после 10:45
Код:
... where (hour=10 and minute^>45 or hour^>=11) get ....
|
Foreigner, Спасибо большое, работает!
P.S.: как вариант можно ещё так:
Код:
set /a t = %time::=%
if %t% leq 104500 goto :Skip
echo privet
:Skip
|
Подскажите, как с помощью wmic определить буквы логических дисков, не выводя буквы дисков, занятых флеш накопителями?
|
sov44, определить непосредственно USB Flash — вряд ли. А так — пробуйте:
Код:
wmic.exe LogicalDisk where "DriveType = 3 AND MediaType=12" get DeviceID
Win32_LogicalDisk class
|
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
|
Например, так:
Код:
@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
|
Пробую с помощью 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? (прав администратора может не быть)
|
Цитата:
Цитата 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%)
|
Прочитал тут
Foreigner, если флешка не вставлена, пишет "echo label is "
|
sov44, а ты просто введи команды:
Код:
wmic logicaldisk where drivetype=2 get * /value
и
set volumename
Что напишет?
|
читать дальше »
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 не определена
что я должен увидеть?
|
Значит drivetype 2 не подойдет, т.к. он еще прихватывает дисковод
Попробуй изменить запрос на:
Код:
set "wmic=2>nul wmic logicaldisk where (drivetype=2 and caption!="A:") get volumename /value"
|
Подскажите, как вывести список разделов жёстких дисков локального компьютера? Сетевые диски не выводить.
|
Petya V4sechkin |
25-03-2014 17:41 2328424 |
Цитата:
Цитата sov44
как вывести список разделов жёстких дисков локального компьютера?
|
Ответ был дан в сообщении 5 ( и вы даже отметили его полезным в 2012 году).
|
Спасибо! Заблудился в трёх соснах :) А как вывести список разделов жёстких дисков без сетевых, если в системе нет wmic?
|
Использовать 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
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
исполняется?
|
Цитата:
Цитата Iska
Такой скрипт vbscript..исполняется?
|
http://savepic.su/4246864.jpg
На другой машине с ХР аналогичная ошибка при запуске батника. Может не по феншую запускаю? :dont-know Iska, если не затруднит, выложите батник.
|
Так. Стало интереснее.
Возвращаемся к 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
Что теперь?
|
синтаксическая ошибка, строка 1 символ 206
|
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
|
Georgio, а до этого — не работали?
|
Iska, не работали: те же самые ошибки, что и у sov44. А у меня не Windows XP, а Windows 7 Starter. Кстати, с подобной проблемой при использовании разбора вывода каких-то команд "mshta.exe" (каких -- не помню) я уже сталкивался.
|
Цитата:
Цитата Georgio
Iska, sov44, не поверите: убрал всё "лишнее", включая "^" перед "!", -- пакетные файлы сработали. »
|
Подтверждаю, оба кода заработали. Второй код вроде быстрее работает.
Iska, для ликбеза поясните код.
|
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
http://savepic.su/4258146.jpg »
|
;). Тогда пользуйтесь предложенными выше вариантами коллеги Georgio.
|
Время: 09:34.
© OSzone.net 2001-