标题: [网络连接] [已解决]批处理for /f怎样2次赋值把两个结果写入一行? [打印本页]
作者: missll 时间: 2011-5-3 14:03 标题: [已解决]批处理for /f怎样2次赋值把两个结果写入一行?
我想使用net view 列出当前组计算机 并且检测它们的操作系统 然后输出到一行当中 (检测操作系统有另外的程序实现)
我对比过其他人的for /f命令再次赋值的格式 可是我非常笨拙 还是没懂.- for /f "skip=3 delims=\\ tokens=1" %%a in ('net view') do set hostname=%%a
- for /f "skip=2 delims= tokens=1*" %%b in ('1.exe %hostname%') do (echo %%a %%b ^>111.txt)
复制代码
这段批处理是有错误的.
第一行可以正常运行 直接取出机器名 我想将机器名附值给hostname 然后用后边的1.exe hostname 去检测系统
直接运行 1.exe XXXX 输出结果是:
C:\>1.exe 1FA6B60B1ADB
Scan Result:
10.0.123.23 -> Windows Server 2003 R2 3790 Service Pack 2
于是第2句我不知道该怎么写了
用第三方程序检测赋给hostname的机器名 取第3行的所有 然后将它赋%%b 然后将输出 机器名 操作系统 到一个文件中.
理想的输出格式是:
NAME 10.0.123.23 -> Windows Server 2003 R2 3790 Service Pack 2
NAME2 10.0.123.24 -> Windows Server 2003 R2 3790 Service Pack 2
NAME3 10.0.123.25 -> Windows Server 2003 R2 3790 Service Pack 2
请各位不啬指点一二.
作者: hanyeguxing 时间: 2011-5-3 14:10
本帖最后由 hanyeguxing 于 2011-5-3 14:12 编辑
把贴子标题中的 关于 、疑问 去掉- @echo off&setlocal enabledelayedexpansion
- (for /f "skip=3 delims=\" %%a in ('net view') do (
- for /f "skip=2 delims=" %%b in ('1.exe %%a') do (
- echo;NAME!a! %%b
- set/aa+=1
- )))>111.txt
复制代码
作者: missll 时间: 2011-5-3 14:34
本帖最后由 missll 于 2011-5-3 14:35 编辑
非常感谢你的回复. 输出的格式斑竹误会了我的意思 我写到的NAME , NAME1 指的是机器名字.
我把 echo;NAME!a! 这里直接修改成了%%a 输入效果如下:
1FA6B60B1ADB 10.0.123.23 -> Windows Server 2003 R2 3790 Service Pack 2
命令成功完成。 0.0.0.0 -> Connect to port 445 Failed, Error:0
1FA6B60B1ADB 是我机器名字, 又有新的问题 机器名和后边的IP地址间隔实在是太长了,我希望机器名与IP之间的间隔短一点.
程序还会进程一个无效的检测"1.exe 命令成功完成。" 显然它是不会有结果的,我需要过滤到这一行 使用 eol= ?
把贴子标题中的 关于 、疑问 去掉@echo off&setlocal enabledelayedexpansion
(for /f "skip=3 delims=\" %%a in ('net view') do (
for /f "skip=2 delims=" %%b in ('1.exe %%a') do (
echo;NAME!a ...
hanyeguxing 发表于 2011-5-3 14:10
作者: hanyeguxing 时间: 2011-5-3 14:42
本帖最后由 hanyeguxing 于 2011-5-3 14:43 编辑
- @echo off
- (for /f "skip=3 delims=\ " %%a in ('net view') do for /f "eol=? skip=2 tokens=1*" %%b in ('1.exe %%a') do echo;%%a %%b %%c)>111.txt
复制代码
作者: missll 时间: 2011-5-3 14:59
看样子不是1.exe 输出的,因为你给的第一段代码中它是完好的
以上是2段代码运行的结果, 第一段中把name 字样换成 第一次取到的%%a就可以了. 但是我换成echo;%%a %%b就出现了 长串空格 何解?
另外我写成 "eol=命" 似乎它并没有忽略这一行.还是执行了
作者: hanyeguxing 时间: 2011-5-3 15:05
4楼代码中\后是有一个空格的
作者: missll 时间: 2011-5-3 15:15
本帖最后由 missll 于 2011-5-3 15:17 编辑
喔 我是点的[复制代码]复制的 目前运行正常 非常感谢.
————————————————————————
1FA6B60B1ADB 10.0.123.23 -> Windows Server 2003 R2 3790 Service Pack 2
命令成功完成。 0.0.0.0 -> Connect to port 445 Failed, Error:0
————————————————————————
还有我想问
1. echo;%%a %%b %%c 和 echo %%a %%b %%c 有什么不同?
我测试它俩输入是相同的.
2.当我设置成 "eol=命" 我想把把"命"开头的行忽略掉 但是还是执行了这一行.
作者: missll 时间: 2011-5-3 15:29
本帖最后由 missll 于 2011-5-3 15:50 编辑
非常感谢hanyeguxing 的帮助 零碎的问题我自己找找原因 多谢花费这么多时间指点。
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |