Board logo

标题: [网络连接] [已解决]批处理for /f怎样2次赋值把两个结果写入一行? [打印本页]

作者: missll    时间: 2011-5-3 14:03     标题: [已解决]批处理for /f怎样2次赋值把两个结果写入一行?

我想使用net view 列出当前组计算机 并且检测它们的操作系统 然后输出到一行当中 (检测操作系统有另外的程序实现)


我对比过其他人的for /f命令再次赋值的格式 可是我非常笨拙 还是没懂.
  1. for /f "skip=3 delims=\\ tokens=1" %%a in ('net view') do set hostname=%%a
  2. 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 编辑

把贴子标题中的 关于 、疑问 去掉
  1. @echo off&setlocal enabledelayedexpansion
  2. (for /f "skip=3 delims=\" %%a in ('net view') do (
  3.     for /f "skip=2 delims=" %%b in ('1.exe %%a') do (
  4.         echo;NAME!a! %%b
  5.         set/aa+=1
  6. )))>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 编辑
  1. @echo off
  2. (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