我知道我可以使用Powershell执行此操作,但是,更多的是作为练习我的命令提示符脚本技能的项目,想要使用批处理文件。我有一个带有ComputerNames的txt文件,我希望我的循环回显该名称,然后运行SystemInfo并从结果中获取一个特定的行。
Computers.txt如下所示:
XPCOMPUTER1
XPCOMPUTER2
W7COMPUTER1
W7COMPUTER2
我的批处理文件如下所示:
For /F %%w IN (computer.txt) Do (echo %%w & psexec \\%%w cmd.exe &
systeminfo | Find "Total Physical Memory:")
应该列出主机名,然后将PSexec列入其中并运行SystemInfo并获取总物理内存,对吧?我是这么想的!但是我得到了
%%W was unexpected at this time.
有什么想法?
答案 0 :(得分:2)
我认为您需要将systeminfo
作为参数传递给cmd
psexec
,如下所示:
For /F %%w IN (computer.txt) Do (echo %%w & psexec \\%%w cmd.exe /c systeminfo | Find "Total Physical Memory:")
否则,您刚刚执行cmd
,然后systeminfo
,systeminfo
未从cmd
开始运行。
此外,除非是拼写错误,否则您在脚本中写了computer.txt
,并说它被称为computers.txt
。
我不确定这是否能解决问题,但值得一试。
答案 1 :(得分:0)
所以事实证明,解决这个问题的最佳方法是使用psexec直接调用systeminfo。
For /F %%w IN (computer.txt) Do (echo %%w & psexec \\%%w systeminfo | Find "Total Physical Memory:")
这让我回答:
Total Physical Memory: 8,126 MB
由于我现在学习了PowerShell,我会完全不同地解决这个问题。
ForEach ($computer in (Get-Content Computer.txt) {
Get-CIMInstance -ComputerName $Computer -Class Win32_ComputerSystem | `
Select Name,@{N='RAM(MB)';E={[int]($_.TotalPhysicalMemory /1mb)}}
结果是:
Name RAM(MB)
---- -------
AL-1NG43Q1 8126
LOCALHOST 8126
127.0.0.1 8126