[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[网络连接] [已解决]批处理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
请各位不啬指点一二.
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2
花开不问月,不语笑红尘.

本帖最后由 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
复制代码
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

本帖最后由 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
花开不问月,不语笑红尘.

TOP

本帖最后由 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
复制代码
1

评分人数

寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

看样子不是1.exe 输出的,因为你给的第一段代码中它是完好的

以上是2段代码运行的结果, 第一段中把name 字样换成 第一次取到的%%a就可以了. 但是我换成echo;%%a %%b就出现了 长串空格 何解?

另外我写成 "eol=命"  似乎它并没有忽略这一行.还是执行了
花开不问月,不语笑红尘.

TOP

4楼代码中\后是有一个空格的
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

本帖最后由 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=命"   我想把把"命"开头的行忽略掉 但是还是执行了这一行.
花开不问月,不语笑红尘.

TOP

本帖最后由 missll 于 2011-5-3 15:50 编辑

非常感谢hanyeguxing 的帮助 零碎的问题我自己找找原因 多谢花费这么多时间指点。
花开不问月,不语笑红尘.

TOP

返回列表