Board logo

标题: [系统相关] 批处理怎样获取硬盘大小并命名记事本? [打印本页]

作者: yanni_enya    时间: 2024-10-19 07:22     标题: 批处理怎样获取硬盘大小并命名记事本?

求助大神!
机房维护,需要快速知道相同配置的电脑用了多大的硬盘、内存。
批处理需要有以下功能:
1、获取学生机电脑硬盘大小和内存大小,生成记事本,并用获取的硬盘大小、内存大小和计算机名命名记事本,具体这个样子:240g&4g&A6    (分隔符&可以用别的符号替代)
2、生成记事本后,拷贝该记事本到教师机的Y文件夹内(教师机有访问密码)。
作者: fzp070    时间: 2024-10-19 12:50

论坛有大佬分享过获取硬件信息相关的帖子,先看看,从大佬代码中提取出需要的,再按需求修改增加
http://www.bathome.net/thread-68226-1-1.html
【gfd大佬:2楼的代码】和【newswan大佬:18楼的代码】

http://www.bathome.net/thread-38259-1-1.html
【winload大佬:1楼下载】

作者: Five66    时间: 2024-10-19 16:36

弄个简单的服务器 ,学生机里常驻运行
教师机向学生机发送请求
学生机服务器根据请求执行操作并返回信息给教师机
教师机根据返回的信息进行处理
作者: yanni_enya    时间: 2024-10-19 22:03

回复 3# Five66


    学生机内存够低了,杀软都不舍得装,常驻程序还是算了吧,就是希望通过教师软件远程执行批处理,然后生成的文件都发送到教师机的共享文件夹下。最后再通过批处理生成exce文件,表格里查看。
作者: Five66    时间: 2024-10-19 23:41

回复 4# yanni_enya


   
除非利用bug ,不然是不能直接执行学生机的批处理的 ,只能通过学生机里的程序自动执行或者用学生机手动执行

其实用nodejs弄个简单的服务器运行 ,也只需要10几M的内存  ,用C弄成服务运行的话估计就几M ,用不了多少内存

实在嫌多的话也可以用系统自带的 ,例如远程桌面 ,教师机一个一个地远程登陆学生机 ,然后执行批处理 (这实际上是学生机里的远程桌面服务程序执行的 ,默认后台常驻)
作者: Five66    时间: 2024-10-20 00:23

这问题主要是教师机该如何执行学生机里的批处理
如果安装了第三方控制系统程序 ,并且能直接执行批处理的话就简单了
作者: yanni_enya    时间: 2024-10-20 07:45

回复 5# Five66


    是我没理解你的意思,抱歉。教师机软件就是你说的学生机常驻程序,我可以控制学生机执行批处理的。
    先给学生机传送批处理,然后按照传送路径远程让学生机统一执行一下批处理,再通过批处理自带的语句实现拷贝到教师机的功能。
作者: czjt1234    时间: 2024-10-20 13:51

  1. rem 另存为 ANSI 编码 bat
  2. ' & cls & cscript.exe /nologo /e:vbscript "%~f0" %* & exit /b
  3. S = "192.168.0.254"    '教师机的IP或计算机名
  4. U = "administrator"    '用户名
  5. P = "12345678"         '密码
  6. t = ""
  7. Set oWMI = GetObject("Winmgmts:\\.\Root\Cimv2")
  8. For Each i In oWMI.InstancesOf("Win32_PhysicalMemory")
  9.     t = t & CInt(i.Capacity / 1024 ^ 3) & "G" & "&"
  10. Next
  11. For Each i In oWMI.InstancesOf("Win32_DiskDrive")
  12.     t = t & CInt(i.Size / 1024 ^ 3) & "G" & "&"
  13. Next
  14. For Each i In oWMI.InstancesOf("Win32_OperatingSystem")
  15.     n = i.CSName
  16. Next
  17. Set oWshShell = CreateObject("WScript.Shell")
  18. oWshShell.Run "net use \\" & S & " " & P & " /user:" & U, 0, True
  19. Set oFSO = CreateObject("Scripting.FileSystemObject")
  20. Set oTextStream = oFSO.OpenTextFile(n & ".txt", 2, True)
  21. oTextStream.Write t & n
  22. oTextStream.Close()
  23. oFSO.CopyFile n & ".txt", "\\" & S  & "\Y\"
复制代码

作者: Five66    时间: 2024-10-20 15:54

不知行否
需要
学生机系统win10
教师机共享文件数量限制调大点
其中
教师机共享路径 \\192.168.1.2\Y
教师机用户administrator密码ffu
不是的自己改
  1. <# :
  2. cls&@echo off
  3. set ___sv=\\192.168.1.2\Y
  4. net use *  %___sv% "ffu" /user:administrator
  5. for /f "usebackq delims=" %%a in (`PowerShell -c "type -Literal '%~f0'|out-string|iex"`) do (
  6. set "___f=%%a"
  7. )
  8. copy /y "%___f%" "%___sv%"
  9. net use * /del
  10. timeout /t 2 1>nul&pause
  11. #>
  12. #http://www.bathome.net/post.php?action=reply&fid=5&tid=68226&repquote=277711&extra=page%3D1&page=2
  13. # 获取内存信息
  14. function Get_Info_Memory() {
  15. $memoryInfo = Get-CimInstance -ClassName Win32_PhysicalMemory
  16. [void]$info.add( "内存:【 $( ($memoryInfo | Measure-Object).Count ) 】" )
  17. [void]$info.add( "    总容量: {0} GB" -f $( ( $memoryInfo | Measure-Object -Property Capacity -Sum ).Sum / 1GB ) )
  18. foreach ($memory in $memoryInfo) {
  19. #$( $memory.BankLabel )
  20. [void]$info.add( "    #   插槽    : $( $memory.DeviceLocator )" )
  21. [void]$info.add( "        品牌    : $( $memory.Manufacturer )" )
  22. [void]$info.add( "        序列号  : $( $memory.SerialNumber )" )
  23. [void]$info.add( "        容量    : $( $memory.Capacity / 1GB ) GB" )
  24. [void]$info.add( "        最高频率: $( $memory.Speed )" )
  25. }
  26. [void]$info.add( "" )
  27. if($ooo.count){[void]$ooo.add([int64](( $memoryInfo | Measure-Object -Property Capacity -Sum ).Sum / 1GB))}
  28. }
  29. # 获取硬盘信息
  30. function Get_Info_Disk() {
  31. $diskInfo = Get-CimInstance -ClassName Win32_DiskDrive | Where-Object { $_.MediaType -eq 'Fixed hard disk media' }
  32. foreach ($disk in $diskInfo) {
  33. $physicalDisk = Get-PhysicalDisk | Where-Object { ('\\.\PHYSICALDRIVE' + $_.DeviceID ) -eq $disk.DeviceID }
  34. Add-Member -InputObject $disk -MemberType NoteProperty -Name BusType -Value $physicalDisk.BusType
  35. }
  36. [void]$info.add( "硬盘:【 $( ($diskInfo | Measure-Object).Count ) 】" )
  37. foreach ($disk in $diskInfo) {
  38. [void]$info.add( "    #   DeviceID: $( $disk.DeviceID )" )
  39. [void]$info.add( "        BusType : $( $disk.BusType )" )
  40. [void]$info.add( "        型号    : $( $disk.Model )" )
  41. [void]$info.add( "        序列号  : $( $disk.SerialNumber )" )
  42. [void]$info.add( "        容量    : $( [int]($disk.Size / 1GB) ) GB" )
  43. }
  44. [void]$info.add( "" )
  45. if($ooo.count){[void]$ooo.add([int64](($diskInfo | Measure -sum -Property size).sum / 1GB))}
  46. }
  47. $ooo=[System.Collections.ArrayList]@()
  48. [void]$ooo.add($env:COMPUTERNAME)
  49. $info = [System.Collections.ArrayList]@()
  50. Get_Info_Memory
  51. Get_Info_Disk
  52. $fff=$env:TEMP+'\'+$ooo[2]+'g_'+$ooo[1]+'g_'+$ooo[0]+'.txt'
  53. $info | Out-File -LiteralPath $fff
  54. $fff
复制代码

作者: yanni_enya    时间: 2024-10-20 18:10

回复 9# Five66


    教师机、学生机都是win7 旗舰64位系统,执行代码后学生机上显示:
    "命令成功完成,系统找不到制定的文件,您有以下远程连接 \\teacher\y 继续运行会取消连接,您想继续此操作吗?"
    手动输入y回车后,提示“命令已完成,按任意键继续。”,再次回车黑框消失,教师机y文件夹内啥也没有。
作者: yanni_enya    时间: 2024-10-20 18:14

回复 8# czjt1234


    您的代码试后教师机收到了学生机发来的文件,文件名是学生机的计算机名,打开可以看到内存、硬盘和机器号。
   您看能否可以直接用文件内的内容直接命名文本文档,这样就不用一个个打开看了。
作者: czjt1234    时间: 2024-10-20 20:00

回复 11# yanni_enya


   
  1. rem 另存为 ANSI 编码 bat
  2. ' & cls & cscript.exe /nologo /e:vbscript "%~f0" %* & exit /b
  3. S = "192.168.0.254"    '教师机的IP或计算机名
  4. U = "administrator"    '用户名
  5. P = "12345678"         '密码
  6. t = ""
  7. Set oWMI = GetObject("Winmgmts:\\.\Root\Cimv2")
  8. For Each i In oWMI.InstancesOf("Win32_PhysicalMemory")
  9.     t = t & CInt(i.Capacity / 1024 ^ 3) & "G" & "&"
  10. Next
  11. For Each i In oWMI.InstancesOf("Win32_DiskDrive")
  12.     t = t & CInt(i.Size / 1024 ^ 3) & "G" & "&"
  13. Next
  14. For Each i In oWMI.InstancesOf("Win32_OperatingSystem")
  15.     n = i.CSName
  16. Next
  17. Set oWshShell = CreateObject("WScript.Shell")
  18. oWshShell.Run "net use \\" & S & " " & P & " /user:" & U, 0, True
  19. Set oFSO = CreateObject("Scripting.FileSystemObject")
  20. Set oTextStream = oFSO.OpenTextFile(t & n & ".txt", 2, True)
  21. oTextStream.Write t & n
  22. oTextStream.Close()
  23. oFSO.CopyFile t & n & ".txt", "\\" & S  & "\Y\"
复制代码

作者: aloha20200628    时间: 2024-10-20 21:04

本帖最后由 aloha20200628 于 2024-10-20 21:19 编辑

回复 1# yanni_enya

给一个用wmic方法直接获取当前内存总量/主盘总量,以便生成楼主所需参数文件的批处版本...
备注》参数文件命名格式为 "内存总量_主盘总量_本机名称.txt",其中本机名称可从系统变量 %COMPUTERNAME% 获取
  1. @echo off &setlocal
  2. for /f %%a in ('wmic ComputerSystem GET TotalPhysicalMemory^|findstr "[0-9][0-9]*" ') do set "mv=%%a"
  3. for /f "tokens=2 delims= " %%a in ('wmic diskdrive get index^,size^|findstr /b "0" ') do set "dv=%%a"
  4. cd.>"%mv:~,-9%G_%dv:~,-9%G_%COMPUTERNAME%.txt"
  5. endlocal&pause&exit/b
复制代码

作者: yanni_enya    时间: 2024-10-20 22:11

回复 12# czjt1234


    功能实现!
作者: yanni_enya    时间: 2024-10-20 22:12

回复 13# aloha20200628


    短小精悍!尝试用copy命令把生成的文件拷贝到教师机y文件夹上,代码看不来谁是谁
作者: Five66    时间: 2024-10-20 22:37

回复 10# yanni_enya


   
win7默认ps版本不支持某些命令和选项 ,导致没有生成记事本
改了下
其中
教师机共享路径 \\192.168.1.2\Y
教师机用户administrator密码ffu
不是的自己改
记得教师机共享文件夹的用户数量限制调大点 ,以便所有学生机都能同时连接访问
  1. <# :
  2. cls&@echo off
  3. set ___sv=\\192.168.1.2\Y
  4. net use *  %___sv% "ffu" /user:administrator
  5. for /f "usebackq delims=" %%a in (`PowerShell -c "type -Literal '%~f0'|out-string|iex"`) do (
  6. set "___f=%%a"
  7. )
  8. copy /y "%___f%" "%___sv%"
  9. echo y|net use * /del
  10. timeout /t 2 1>nul&pause&exit/b
  11. #>
  12. #http://www.bathome.net/post.php?action=reply&fid=5&tid=68226&repquote=277711&extra=page%3D1&page=2
  13. # 获取内存信息
  14. function Get_Info_Memory() {
  15. #$memoryInfo = Get-CimInstance -ClassName Win32_PhysicalMemory
  16. $memoryInfo = Get-wmiobject -Class Win32_PhysicalMemory
  17. [void]$info.add( "内存:【 $( ($memoryInfo | Measure-Object).Count ) 】" )
  18. [void]$info.add( "    总容量: {0} GB" -f $( ( $memoryInfo | Measure-Object -Property Capacity -Sum ).Sum / 1GB ) )
  19. foreach ($memory in $memoryInfo) {
  20. #$( $memory.BankLabel )
  21. [void]$info.add( "    #   插槽    : $( $memory.DeviceLocator )" )
  22. [void]$info.add( "        品牌    : $( $memory.Manufacturer )" )
  23. [void]$info.add( "        序列号  : $( $memory.SerialNumber )" )
  24. [void]$info.add( "        容量    : $( $memory.Capacity / 1GB ) GB" )
  25. [void]$info.add( "        最高频率: $( $memory.Speed )" )
  26. }
  27. [void]$info.add( "" )
  28. if($ooo.count){[void]$ooo.add([int64](( $memoryInfo | Measure-Object -Property Capacity -Sum ).Sum / 1GB))}
  29. }
  30. # 获取硬盘信息
  31. function Get_Info_Disk() {
  32. #$diskInfo = Get-CimInstance -ClassName Win32_DiskDrive | Where-Object { $_.MediaType -eq 'Fixed hard disk media' }
  33. $diskInfo = Get-wmiobject -Class Win32_DiskDrive | Where-Object { $_.MediaType -eq 'Fixed hard disk media' }
  34. if($BuildVersion.Major -ge '10'){
  35. foreach ($disk in $diskInfo) {
  36. $physicalDisk = Get-PhysicalDisk | Where-Object { ('\\.\PHYSICALDRIVE' + $_.DeviceID ) -eq $disk.DeviceID }
  37. Add-Member -InputObject $disk -MemberType NoteProperty -Name BusType -Value $physicalDisk.BusType
  38. }}
  39. [void]$info.add( "硬盘:【 $( ($diskInfo | Measure-Object).Count ) 】" )
  40. foreach ($disk in $diskInfo) {
  41. [void]$info.add( "    #   DeviceID: $( $disk.DeviceID )" )
  42. [void]$info.add( "        BusType : $( $disk.BusType )" )
  43. [void]$info.add( "        型号    : $( $disk.Model )" )
  44. [void]$info.add( "        序列号  : $( $disk.SerialNumber )" )
  45. [void]$info.add( "        容量    : $( [int]($disk.Size / 1GB) ) GB" )
  46. }
  47. [void]$info.add( "" )
  48. if($ooo.count){[void]$ooo.add([int64](($diskInfo | Measure -sum -Property size).sum / 1GB))}
  49. }
  50. $ooo=[System.Collections.ArrayList]@()
  51. [void]$ooo.add($env:COMPUTERNAME)
  52. $info = [System.Collections.ArrayList]@()
  53. Get_Info_Memory
  54. Get_Info_Disk
  55. $fff=$env:TEMP+'\'+$ooo[2]+'g_'+$ooo[1]+'g_'+$ooo[0]+'.txt'
  56. #$info | Out-File -LiteralPath $fff
  57. [io.file]::WriteAllText($fff,($info|out-string))
  58. $fff
复制代码

作者: yanni_enya    时间: 2024-10-21 22:45

回复 16# Five66


    功能实现!并且生成并拷贝到教师机上的文件命名合适,打开后是具体的内存和硬盘信息。
    只是学生机运行后会停顿在一个黑框处,交互式的询问下一步。这倒没什么,感谢您的付出~
作者: yanni_enya    时间: 2024-11-2 17:33

回复 16# Five66


    您的代码和12楼的代码都可以实现功能,但是y文件夹内都只收到了21台电脑的信息!而且奇怪的是我是在两个机房试的,结果居然都是21台!
作者: yanni_enya    时间: 2024-11-2 17:34

回复 12# czjt1234


    您的代码和16楼的代码都可以实现功能,但是y文件夹内都只收到了21台电脑的信息!而且奇怪的是我是在两个机房试的,结果居然都是21台!
作者: Five66    时间: 2024-11-2 18:01

回复 18# yanni_enya


   
教师机共享文件夹的用户数量限制是多少?调大了没?

作者: yanni_enya    时间: 2024-11-2 22:48

回复 20# Five66


    好像还真是这问题,谢谢提示,明了我再试试~
作者: Five66    时间: 2024-11-3 00:27

回复 21# yanni_enya


    不一定的说 ,也有可能是登陆数量或连接数的限制 ,这个就不知道怎么改了
作者: yanni_enya    时间: 2024-11-13 16:32

回复 22# Five66


    不行,那个20调大后自动就变回20了!
作者: Five66    时间: 7 天前 18:59

回复 23# yanni_enya


    啊 ,这个不懂的说
可以试试给代码加个延迟 ,延迟一点时间后才工作
例如下面的 ,获取学生机的ip最后一位然后延迟 ,添加到之前的代码第一行后
  1. '&cls&@echo off&powershell -c "''"&cscript -e >nul
  2. @rem 仅第一个接口的ip
  3. @set @@ip=&for /f "tokens=2 delims= " %%a in ('arp -a') do if not defined @@ip set @@ip=%%a
  4. @set /a @@ip=(%@@ip:~-1%+0)%%5+1
  5. @timeout /t %@@ip%&set "@@ip="
复制代码

作者: czjt1234    时间: 6 天前 05:42

  1. rem 另存为 ANSI 编码 bat
  2. ' & cls & cscript.exe /nologo /e:vbscript "%~f0" %* & exit /b
  3. S = "192.168.0.254"    '教师机的IP或计算机名
  4. U = "administrator"    '用户名
  5. P = "12345678"         '密码
  6. t = ""
  7. Set oWMI = GetObject("Winmgmts:\\.\Root\Cimv2")
  8. For Each i In oWMI.InstancesOf("Win32_PhysicalMemory")
  9.     t = t & CInt(i.Capacity / 1024 ^ 3) & "G" & "&"
  10. Next
  11. For Each i In oWMI.InstancesOf("Win32_DiskDrive")
  12.     t = t & CInt(i.Size / 1024 ^ 3) & "G" & "&"
  13. Next
  14. For Each i In oWMI.InstancesOf("Win32_OperatingSystem")
  15.     n = i.CSName
  16. Next
  17. Set oFSO = CreateObject("Scripting.FileSystemObject")
  18. Set oTextStream = oFSO.OpenTextFile(t & n & ".txt", 2, True)
  19. oTextStream.Write t & n
  20. oTextStream.Close()
  21. Set oWshShell = CreateObject("WScript.Shell")
  22. Randomize
  23. s = Int(10 * Rnd() + 1)
  24. oWshShell.Run "ping 127.0.0.1 -n " & s, 0, True
  25. oWshShell.Run "net use \\" & S & " " & P & " /user:" & U, 0, True
  26. oFSO.CopyFile t & n & ".txt", "\\" & S  & "\Y\"
  27. oWshShell.Run "net use \\" & S & " /delete", 0, True
复制代码
随机延时 1 ~ 10 秒再连接服务器,然后断开连接,这样试试看
作者: yanni_enya    时间: 4 天前 16:58

回复 25# czjt1234


    教师机上运行可以看到以配置信息生成的文本文档,但不往Y文件夹里拷,学生机统一运行后就是黑框持续一会就消失了,没有生成任何文件,且教师机y文件夹里也没东西。如果手动运行一台学生机的批处理,持续一会黑框后,会在接受批处理的文件夹里生成配置信息命名的文本文档,也不拷贝。




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2