Board logo

标题: [完美解决]关于多线程start && 命令连接的问题 [打印本页]

作者: 429499381     时间: 2007-8-11 02:29    标题: [完美解决]关于多线程start && 命令连接的问题

@echo on

:loop

set /a c+=1

start /i /min ping -n 2 172.16.1.%c% && echo 172.16.1.%c% >>b:\ip.txt


if "%c%"=="20" exit

goto :loop


上面的代码无法实现能PING 通的放入IP.txt   谁能告诉我为什么

[ Last edited by 429499381 on 2007-8-14 at 03:22 PM ]
作者: 429499381     时间: 2007-8-11 06:00
有谁知道如何让多线程并保留部分结果!!
如同是开20开窗口PING, 能PING通的放如1.txt
作者: Michael     时间: 2007-8-11 10:05
findstr
作者: 429499381     时间: 2007-8-11 16:17
但是用了 start /i  之后,  新开的窗口无法同时实现命令的连接!!

start /i  tasklist & pause                     其中pasue 无法传递在新环境下!!

有解吗??
作者: 不得不爱     时间: 2007-8-12 11:28
不要使用start命令就可以了
作者: 429499381     时间: 2007-8-13 16:14
不用START如何实现模拟多线程呢??  给点提示!!!  我刚刚又试验了一下
下面的P处理能模拟多线程, 但无法退出!! 哎!!

set a=
:loop
set /a a+=1
cmd /c start  echo %a% >>e:\%a%.txt
if "%a%"=="5" exit
goto :loop
作者: 不得不爱     时间: 2007-8-13 21:17
set a=
:loop
set /a a+=1
echo %a% >>e:\%a%.txt
if "%a%"=="5" exit
goto :loop
这样就可以了
@echo on

:loop
set /a c+=1
ping -n 2 172.16.1.%c% && echo 172.16.1.%c% >>b:\ip.txt
if "%c%"=="20" exit
goto :loop
这也会正确,如果执行start /i /min ping -n 2 172.16.1.%c% && echo 172.16.1.%c% >>b:\ip.txt命令的话,系统会新开窗口执行ping -n 2 172.16.1.%c%同时在不等得到结果后就在本出口执行echo 172.16.1.%c% >>b:\ip.txt所以你的BAT会出错!
也就是说:start /i /min ping -n 2 172.16.1.%c% && echo 172.16.1.%c% >>b:\ip.txt
等效于:
start /i /min ping -n 2 172.16.1.%c%
echo 172.16.1.%c% >>b:\ip.txt
作者: 429499381     时间: 2007-8-14 00:27
我知道你说的, 我也实验过了!!

我是想知道如何模拟多线程 或者说有什么办法能让

START传递2个以上的命令在新环境下!!!

不知道我的表达够不够清楚!!!  有解吗? 给点提示!!!
作者: 不得不爱     时间: 2007-8-14 08:27
START不能传递2个以上的命令在新环境下,不过可以用下面的方法来解决你的问题
echo ping -n 2 172.16.1.%%1 ^&^& echo 172.16.1.%%1 ^>^>b:\ip.txt ^&exit>tmp.bat
:loop
set /a c+=1
start /i /min tmp.bat %c%
if "%c%"=="20" ping -n 5 127.1 &del tmp.bat&exit
goto :loop

作者: ccwan     时间: 2007-8-14 09:31
楼主的要求是什么?
这样?
set a=
:loop
set /a a+=1
start cmd /c &echo %a% >>%a%.txt
pause
if "%a%"=="5" exit
goto :loop
[ Last edited by ccwan on 2007-8-14 at 09:34 AM ]
作者: 429499381     时间: 2007-8-14 15:21
10楼的满足了我的要求, 太谢谢你了, 我求了4天, 实验了6个小时都没结果,终于等到你了

    我试过CMD /C START 为什么没想想试START CMD /C 呢??

  对DOS还是不够娴熟!!! 
作者: electronixtar     时间: 2007-8-14 15:48
多进程好不?
作者: 429499381     时间: 2007-8-14 20:01
唯一的好处是100%的CPU!!  本来是想写一个用WMIC查询有没有非法上机的批

处理

但是后来发现部分新的XP系统怎么也无法查询远程的进程名!!  总是拒绝访问!!

不解, 估计没开RPC远程过程调用吧!!

ccwan
     请问为什么
set a=
:loop
set /a a+=1
start cmd /c &echo %a% >>%a%.txt
pause
if "%a%"=="5" exit
goto :loop

START CMD /C 后面加了 & 才能达到我的效果!! 这是为什么???
作者: 不得不爱     时间: 2007-8-14 20:22
很简单,加了 &后echo %a% >>%a%.txt 命令就在本窗口执行了,新开的窗口就执行了下cmd /c命令
作者: ccwan     时间: 2007-8-15 08:06
不得不爱说的很对
作者: titiger     时间: 2007-9-5 22:44
我看了很久,综合楼上的意见最后尝试应该这样写:

@echo off
set a=100
:loop
set /a a+=1
::start cmd /c &echo %a% >>%a%.txt
start cmd /c "ping -n 1 192.168.2.%a%&&echo 192.168.2.%a% >>ip.txt"
if "%a%"=="105" exit
goto :loop
作者: titiger     时间: 2007-9-5 23:52
不过多线程的使用还是会出问题的,例如如果同时有两个线程完成一起输出,那么就会产生数据丢失现象。我试过启动200个线程,结果113个成功写入,其余丢失。这个应该怎么解决呢?
作者: bd123456789     时间: 2008-3-12 17:21    标题: 我也测试一下,不过发现有问题

start cmd /c & net send 10.20.8.214 "00">>11.txt
start cmd /c & net send 10.20.8.192 "00">>11.txt

为什么只能发送第一个,第二个就没有了?
难道非要PAUSE


以上程序的目的是,在使用NET seng   发送的时候 遇上失败会损耗许多时间
如果能够同时发送的话,可以节约时间!


[ Last edited by bd123456789 on 2008-3-12 at 08:53 PM ]