Posts in category batch

批处理中很有用的命令 WMIC(补 20120503)

原文来自 https://code.google.com/p/thinkbasenet/wiki/20120503_WMIC

最典型的用法

通过命令行中的一些内容查找程序

wmic process where "( (CommandLine LIKE '%_notepad_%') AND NOT(CommandLine LIKE '%_wmic_%' ) )"
  • 为了防止有 '%notepad%' 这样的环境变量, 所以使用了 '%_notepad_%' 这样的查询语法, 一般情况下, 直接使用 '%notepad%' 也是可以的.
  • 另外, 查询条件中 LIKE 操作符是不区分字符串的大小写的.

将 wmic 的输出由 unicode 转为 ascii

wmic 输出到 stdout 和 stderr 的内容都是 unicode 的,因此重定向到文件后,看起来会是这个样子:

使用如下的代码可以将 wmic 的输出由 unicode 转为 ascii:

:: 需要将 wmic 的输出由 unicode 转为 ascii
set TMP_WMIC_OUT=%TEMP%\wmic-process-list.txt
wmic /output:"%TMP_WMIC_OUT%" process where name="cmd.exe" get sessionid,commandline
cmd /A /C type "%TMP_WMIC_OUT%"

通过命令行中的一些内容结束程序

wmic process where "( (CommandLine LIKE '%_notepad_%') AND NOT(CommandLine LIKE '%_wmic_%' ) )" delete

参考

  • 关于 wmic 命令输出的 unicode 转 ascii
  • MSDN:
  • Microsoft TechNet
  • 来自 http://lgj573.iteye.com/blog/327432
    # wmic 获取硬盘固定分区盘符:
    wmic logicaldisk where "drivetype=3" get name
    
    # wmic 获取硬盘各分区文件系统以及可用空间:
    wmic logicaldisk where "drivetype=3" get name,filesystem,freespace
    
    # wmic 获取进程名称以及可执行路径:
    wmic process get name,executablepath
    
    # wmic 删除指定进程(根据进程名称):
    wmic process where name="qq.exe" call terminate
    # 或者用
    wmic process where name="qq.exe" delete
    
    # wmic 删除指定进程(根据进程PID):
    wmic process where pid="123" delete
    
    # wmic 创建新进程
    wmic process call create "C:\Program Files\Tencent\QQ\QQ.exe"
    
    # 在远程机器上创建新进程:
    wmic /node:192.168.1.10 /user:administrator /password:123456 process call create cmd.exe
    
    # 关闭本地计算机
    wmic process call create shutdown.exe
    
    # 重启远程计算机
    wmic /node:192.168.1.10/user:administrator /password:123456 process call create "shutdown.exe -r -f -m"
    
    # 更改计算机名称
    wmic computersystem where "caption='%ComputerName%'" call rename newcomputername
    
    # 更改帐户名
    wmic USERACCOUNT where "name='%UserName%'" call rename newUserName
    
    # wmic 结束可疑进程(根据进程的启动路径)
    wmic process where "name='explorer.exe' and executablepath<>'%SystemDrive%\\windows\\explorer.exe'" delete
    
    # wmic 获取物理内存
    wmic memlogical get TotalPhysicalMemory|find /i /v "t"
    
    # wmic 获取文件的创建、访问、修改时间
    @echo off
    wmic datafile where name^="c:\\windows\\system32\\notepad.exe" get CreationDate^,LastAccessed^,LastModified
    
    # wmic 全盘搜索某文件并获取该文件所在目录
    wmic datafile where "FileName='qq' and extension='exe'" get drive,path
    
    for /f "skip=1 tokens=1*" %i in ('wmic datafile where "FileName='qq' and extension='exe'" get drive^,path') do (set "qPath=%i%j"&@echo %qPath:~0,-3%)
    
    # 获取屏幕分辨率
    wmic DESKTOPMONITOR where Status='ok' get ScreenHeight,ScreenWidth
    
    # 获取U盘盘符,并运行U盘上的QQ.exe
    @for /f "skip=1 tokens=*" %i in ('wmic logicaldisk where "drivetype=2" get name') do (if not "%i"=="" start d:\qq.exe)
    
    # 获得进程当前占用的内存和最大占用内存的大小:
    wmic process where caption='filename.exe' get WorkingSetSize,PeakWorkingSetSize
    # 把内存大小改成KB(MB的话可能有小数)
    @echo off
    for /f "skip=1 tokens=1-2 delims= " %%a in ('wmic process where caption^="conime.exe" get WorkingSetSize^,PeakWorkingSetSize') do (
    set /a m=%%a/1024
    set /a mm=%%b/1024
    echo 进程conime.exe现在占用内存:%m%K;最高占用内存:%mm%K
    )
    pause