标题: [系统相关] 批处理怎样获取硬盘大小并命名记事本? [打印本页]
作者: 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
- rem 另存为 ANSI 编码 bat
- ' & cls & cscript.exe /nologo /e:vbscript "%~f0" %* & exit /b
-
- S = "192.168.0.254" '教师机的IP或计算机名
- U = "administrator" '用户名
- P = "12345678" '密码
-
- t = ""
- Set oWMI = GetObject("Winmgmts:\\.\Root\Cimv2")
- For Each i In oWMI.InstancesOf("Win32_PhysicalMemory")
- t = t & CInt(i.Capacity / 1024 ^ 3) & "G" & "&"
- Next
- For Each i In oWMI.InstancesOf("Win32_DiskDrive")
- t = t & CInt(i.Size / 1024 ^ 3) & "G" & "&"
- Next
- For Each i In oWMI.InstancesOf("Win32_OperatingSystem")
- n = i.CSName
- Next
-
- Set oWshShell = CreateObject("WScript.Shell")
- oWshShell.Run "net use \\" & S & " " & P & " /user:" & U, 0, True
-
- Set oFSO = CreateObject("Scripting.FileSystemObject")
- Set oTextStream = oFSO.OpenTextFile(n & ".txt", 2, True)
- oTextStream.Write t & n
- oTextStream.Close()
- oFSO.CopyFile n & ".txt", "\\" & S & "\Y\"
复制代码
作者: Five66 时间: 2024-10-20 15:54
不知行否
需要
学生机系统win10
教师机共享文件数量限制调大点
其中
教师机共享路径 \\192.168.1.2\Y
教师机用户administrator密码ffu
不是的自己改- <# :
- cls&@echo off
-
- set ___sv=\\192.168.1.2\Y
- net use * %___sv% "ffu" /user:administrator
-
- for /f "usebackq delims=" %%a in (`PowerShell -c "type -Literal '%~f0'|out-string|iex"`) do (
- set "___f=%%a"
- )
- copy /y "%___f%" "%___sv%"
- net use * /del
- timeout /t 2 1>nul&pause
- #>
-
- #http://www.bathome.net/post.php?action=reply&fid=5&tid=68226&repquote=277711&extra=page%3D1&page=2
-
- # 获取内存信息
- function Get_Info_Memory() {
- $memoryInfo = Get-CimInstance -ClassName Win32_PhysicalMemory
- [void]$info.add( "内存:【 $( ($memoryInfo | Measure-Object).Count ) 】" )
- [void]$info.add( " 总容量: {0} GB" -f $( ( $memoryInfo | Measure-Object -Property Capacity -Sum ).Sum / 1GB ) )
- foreach ($memory in $memoryInfo) {
- #$( $memory.BankLabel )
- [void]$info.add( " # 插槽 : $( $memory.DeviceLocator )" )
- [void]$info.add( " 品牌 : $( $memory.Manufacturer )" )
- [void]$info.add( " 序列号 : $( $memory.SerialNumber )" )
- [void]$info.add( " 容量 : $( $memory.Capacity / 1GB ) GB" )
- [void]$info.add( " 最高频率: $( $memory.Speed )" )
- }
- [void]$info.add( "" )
- if($ooo.count){[void]$ooo.add([int64](( $memoryInfo | Measure-Object -Property Capacity -Sum ).Sum / 1GB))}
- }
-
- # 获取硬盘信息
- function Get_Info_Disk() {
- $diskInfo = Get-CimInstance -ClassName Win32_DiskDrive | Where-Object { $_.MediaType -eq 'Fixed hard disk media' }
- foreach ($disk in $diskInfo) {
- $physicalDisk = Get-PhysicalDisk | Where-Object { ('\\.\PHYSICALDRIVE' + $_.DeviceID ) -eq $disk.DeviceID }
- Add-Member -InputObject $disk -MemberType NoteProperty -Name BusType -Value $physicalDisk.BusType
- }
- [void]$info.add( "硬盘:【 $( ($diskInfo | Measure-Object).Count ) 】" )
- foreach ($disk in $diskInfo) {
- [void]$info.add( " # DeviceID: $( $disk.DeviceID )" )
- [void]$info.add( " BusType : $( $disk.BusType )" )
- [void]$info.add( " 型号 : $( $disk.Model )" )
- [void]$info.add( " 序列号 : $( $disk.SerialNumber )" )
- [void]$info.add( " 容量 : $( [int]($disk.Size / 1GB) ) GB" )
- }
- [void]$info.add( "" )
- if($ooo.count){[void]$ooo.add([int64](($diskInfo | Measure -sum -Property size).sum / 1GB))}
- }
-
- $ooo=[System.Collections.ArrayList]@()
- [void]$ooo.add($env:COMPUTERNAME)
- $info = [System.Collections.ArrayList]@()
- Get_Info_Memory
- Get_Info_Disk
- $fff=$env:TEMP+'\'+$ooo[2]+'g_'+$ooo[1]+'g_'+$ooo[0]+'.txt'
- $info | Out-File -LiteralPath $fff
- $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
- rem 另存为 ANSI 编码 bat
- ' & cls & cscript.exe /nologo /e:vbscript "%~f0" %* & exit /b
-
- S = "192.168.0.254" '教师机的IP或计算机名
- U = "administrator" '用户名
- P = "12345678" '密码
-
- t = ""
- Set oWMI = GetObject("Winmgmts:\\.\Root\Cimv2")
- For Each i In oWMI.InstancesOf("Win32_PhysicalMemory")
- t = t & CInt(i.Capacity / 1024 ^ 3) & "G" & "&"
- Next
- For Each i In oWMI.InstancesOf("Win32_DiskDrive")
- t = t & CInt(i.Size / 1024 ^ 3) & "G" & "&"
- Next
- For Each i In oWMI.InstancesOf("Win32_OperatingSystem")
- n = i.CSName
- Next
- Set oWshShell = CreateObject("WScript.Shell")
- oWshShell.Run "net use \\" & S & " " & P & " /user:" & U, 0, True
- Set oFSO = CreateObject("Scripting.FileSystemObject")
- Set oTextStream = oFSO.OpenTextFile(t & n & ".txt", 2, True)
- oTextStream.Write t & n
- oTextStream.Close()
- 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% 获取
- @echo off &setlocal
- for /f %%a in ('wmic ComputerSystem GET TotalPhysicalMemory^|findstr "[0-9][0-9]*" ') do set "mv=%%a"
- for /f "tokens=2 delims= " %%a in ('wmic diskdrive get index^,size^|findstr /b "0" ') do set "dv=%%a"
- cd.>"%mv:~,-9%G_%dv:~,-9%G_%COMPUTERNAME%.txt"
- 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
不是的自己改
记得教师机共享文件夹的用户数量限制调大点 ,以便所有学生机都能同时连接访问- <# :
- cls&@echo off
-
- set ___sv=\\192.168.1.2\Y
- net use * %___sv% "ffu" /user:administrator
-
- for /f "usebackq delims=" %%a in (`PowerShell -c "type -Literal '%~f0'|out-string|iex"`) do (
- set "___f=%%a"
- )
- copy /y "%___f%" "%___sv%"
- echo y|net use * /del
- timeout /t 2 1>nul&pause&exit/b
- #>
-
- #http://www.bathome.net/post.php?action=reply&fid=5&tid=68226&repquote=277711&extra=page%3D1&page=2
-
- # 获取内存信息
- function Get_Info_Memory() {
- #$memoryInfo = Get-CimInstance -ClassName Win32_PhysicalMemory
- $memoryInfo = Get-wmiobject -Class Win32_PhysicalMemory
- [void]$info.add( "内存:【 $( ($memoryInfo | Measure-Object).Count ) 】" )
- [void]$info.add( " 总容量: {0} GB" -f $( ( $memoryInfo | Measure-Object -Property Capacity -Sum ).Sum / 1GB ) )
- foreach ($memory in $memoryInfo) {
- #$( $memory.BankLabel )
- [void]$info.add( " # 插槽 : $( $memory.DeviceLocator )" )
- [void]$info.add( " 品牌 : $( $memory.Manufacturer )" )
- [void]$info.add( " 序列号 : $( $memory.SerialNumber )" )
- [void]$info.add( " 容量 : $( $memory.Capacity / 1GB ) GB" )
- [void]$info.add( " 最高频率: $( $memory.Speed )" )
- }
- [void]$info.add( "" )
- if($ooo.count){[void]$ooo.add([int64](( $memoryInfo | Measure-Object -Property Capacity -Sum ).Sum / 1GB))}
- }
-
- # 获取硬盘信息
- function Get_Info_Disk() {
- #$diskInfo = Get-CimInstance -ClassName Win32_DiskDrive | Where-Object { $_.MediaType -eq 'Fixed hard disk media' }
- $diskInfo = Get-wmiobject -Class Win32_DiskDrive | Where-Object { $_.MediaType -eq 'Fixed hard disk media' }
- if($BuildVersion.Major -ge '10'){
- foreach ($disk in $diskInfo) {
- $physicalDisk = Get-PhysicalDisk | Where-Object { ('\\.\PHYSICALDRIVE' + $_.DeviceID ) -eq $disk.DeviceID }
- Add-Member -InputObject $disk -MemberType NoteProperty -Name BusType -Value $physicalDisk.BusType
- }}
- [void]$info.add( "硬盘:【 $( ($diskInfo | Measure-Object).Count ) 】" )
- foreach ($disk in $diskInfo) {
- [void]$info.add( " # DeviceID: $( $disk.DeviceID )" )
- [void]$info.add( " BusType : $( $disk.BusType )" )
- [void]$info.add( " 型号 : $( $disk.Model )" )
- [void]$info.add( " 序列号 : $( $disk.SerialNumber )" )
- [void]$info.add( " 容量 : $( [int]($disk.Size / 1GB) ) GB" )
- }
- [void]$info.add( "" )
- if($ooo.count){[void]$ooo.add([int64](($diskInfo | Measure -sum -Property size).sum / 1GB))}
- }
-
- $ooo=[System.Collections.ArrayList]@()
- [void]$ooo.add($env:COMPUTERNAME)
- $info = [System.Collections.ArrayList]@()
- Get_Info_Memory
- Get_Info_Disk
- $fff=$env:TEMP+'\'+$ooo[2]+'g_'+$ooo[1]+'g_'+$ooo[0]+'.txt'
- #$info | Out-File -LiteralPath $fff
- [io.file]::WriteAllText($fff,($info|out-string))
- $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最后一位然后延迟 ,添加到之前的代码第一行后- '&cls&@echo off&powershell -c "''"&cscript -e >nul
- @rem 仅第一个接口的ip
- @set @@ip=&for /f "tokens=2 delims= " %%a in ('arp -a') do if not defined @@ip set @@ip=%%a
- @set /a @@ip=(%@@ip:~-1%+0)%%5+1
- @timeout /t %@@ip%&set "@@ip="
复制代码
作者: czjt1234 时间: 6 天前 05:42
- rem 另存为 ANSI 编码 bat
- ' & cls & cscript.exe /nologo /e:vbscript "%~f0" %* & exit /b
-
- S = "192.168.0.254" '教师机的IP或计算机名
- U = "administrator" '用户名
- P = "12345678" '密码
-
- t = ""
- Set oWMI = GetObject("Winmgmts:\\.\Root\Cimv2")
- For Each i In oWMI.InstancesOf("Win32_PhysicalMemory")
- t = t & CInt(i.Capacity / 1024 ^ 3) & "G" & "&"
- Next
- For Each i In oWMI.InstancesOf("Win32_DiskDrive")
- t = t & CInt(i.Size / 1024 ^ 3) & "G" & "&"
- Next
- For Each i In oWMI.InstancesOf("Win32_OperatingSystem")
- n = i.CSName
- Next
- Set oFSO = CreateObject("Scripting.FileSystemObject")
- Set oTextStream = oFSO.OpenTextFile(t & n & ".txt", 2, True)
- oTextStream.Write t & n
- oTextStream.Close()
- Set oWshShell = CreateObject("WScript.Shell")
- Randomize
- s = Int(10 * Rnd() + 1)
- oWshShell.Run "ping 127.0.0.1 -n " & s, 0, True
- oWshShell.Run "net use \\" & S & " " & P & " /user:" & U, 0, True
- oFSO.CopyFile t & n & ".txt", "\\" & S & "\Y\"
- oWshShell.Run "net use \\" & S & " /delete", 0, True
复制代码
随机延时 1 ~ 10 秒再连接服务器,然后断开连接,这样试试看
作者: yanni_enya 时间: 4 天前 16:58
回复 25# czjt1234
教师机上运行可以看到以配置信息生成的文本文档,但不往Y文件夹里拷,学生机统一运行后就是黑框持续一会就消失了,没有生成任何文件,且教师机y文件夹里也没东西。如果手动运行一台学生机的批处理,持续一会黑框后,会在接受批处理的文件夹里生成配置信息命名的文本文档,也不拷贝。
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |