标题: [文本处理] 如何将多个批处理的代码合并到一起 [打印本页]
作者: maluwang 时间: 2016-12-10 22:18 标题: 如何将多个批处理的代码合并到一起
本帖最后由 maluwang 于 2016-12-12 20:37 编辑
工作中 每天都要使用的批处理如下
批处理1- tcprelay.py -t 8000:8001 -u 32145512fdee4bfdsfsdfsdsdas9c46c579cbd7
复制代码
批处理2- tcprelay.py -t 8000:8002 -u 32145512fdee4bd66dasdas9c46c579cbd7
复制代码
批处理3- tcprelay.py -t 8000:8003 -u asddasfg10eb755bd5c8025bd6596f89eb91df6b5
复制代码
批处理4- tcprelay.py -t 8000:8004 -u asddasfg10efdsfsdghhh5bd6596f89eb91df6b5
复制代码
批处理5- tcprelay.py -t 8000:8005 -u a233456g10eb755bd5c8025bd6596f89eb91df6b5
复制代码
......
以上是5个独立的批处理.bat文件。工作中,每天需要点开这5个批处理,并且让他保留窗口不关闭。
有没有方法把这5个批处理集中在一个批处理。
也就是只开一个批处理而不用再开5个批处理呢?
看看老司机的方法,谢谢
作者: Nsqs 时间: 2016-12-10 22:31
你是不是傻,5个代码全部合到一起不就可以了
作者: maluwang 时间: 2016-12-10 23:14
回复 2# Nsqs
额。不知道谁傻。。。。。如果仅仅是写到一起就行 也不会来批处理之家发帖了。
作者: /zhqsystem/zhq 时间: 2016-12-11 03:43
回复 1# maluwang
- for /l %%n in (8001,1,8005)do (
- (echo,@echo off
- echo,tcprelay.py -t 8000:%%~n
- echo,pause)>"%~dp0%%~n.bat"
- start/i "%%~n" "%~dp0%%~n.bat"
- )
复制代码
作者: ads350668398 时间: 2016-12-11 08:45
- echo
- title 十点十分启动12345
- :a
- ping /n 3 127.0.0.1>nul
- ::enho.|set /p aa=10
- echo %time:~0,2%%time:~3,2%
- set aa=%time:~0,2%%time:~3,2%
- if %aa%==1110 start 1.bat&start 2.bat&start 3.bat&4.bat&5.bat&echo 1&exit
-
- goto a
复制代码
作者: maluwang 时间: 2016-12-11 14:08
回复 4# /zhqsystem/zhq
好厉害!
测试成功。
但是有个疑问。运行你的这个批处理会显示5个窗口。我是想让5个内容只在一个窗口显示(弹出一个窗口)。并且不生成.bat的文件,你这个会自动生成5个bat文件
作者: czjt1234 时间: 2016-12-11 17:27
不明白你为什么要加pause
照理你的tcprelay.py程序不会自动退出,否则窗口开了还有什么意思
如果tcprelay.py不会自动退出,那么
#echo off
start tcprelay.py -t 8000:8001
start tcprelay.py -t 8000:8002
start tcprelay.py -t 8000:8003
start tcprelay.py -t 8000:8004
start tcprelay.py -t 8000:8005
pause
应该就可以
作者: GNU 时间: 2016-12-11 18:29
回复 3# maluwang
请具体介绍一下为什么写到一个bat文件里面不行。有什么报错信息?
作者: /zhqsystem/zhq 时间: 2016-12-11 23:14
回复 6# maluwang
- for /l %%n in (8001,1,8005)do (
- if not defined cmd set "cmd=y"&&(start "%systemroot%\system32\cmd.exe" cd /d "%~dp0")
- start/i "%%~n" "%~dp0tcprelay.py" -t 8000:%%~n
- )
复制代码
作者: codegay 时间: 2016-12-12 00:03
start tcprelay.pyw
就这么个问题还好几年。守着python也不会用。
作者: maluwang 时间: 2016-12-12 01:31
回复 10# codegay
不是不用,是不能用,归根到底还是不会 。
#echo off
tcprelay.py -t 22:23 -u 6edcd1cdd9f2aced282a8e4cvbnc3310df76342e
(后面是设备号)
加了start 和不加start 区别大着呢 。加了start不能制定设备号。所以一直没有加
作者: maluwang 时间: 2016-12-12 01:44
回复 8# GNU
没有报错信息,每个对应一个设备码用于连接对应端口
合并后运行只有一个设备码,不能每个设备码对应每个端口
作者: maluwang 时间: 2016-12-12 01:46
回复 7# czjt1234
虽然加了start可以合并到一起运行 但是却不能识别设备码 。
作者: maluwang 时间: 2016-12-12 01:47
回复 9# /zhqsystem/zhq
感谢回复,你这个确实完全看不懂,天书。我会努力学习的,感谢
作者: codegay 时间: 2016-12-12 02:29
这种这么关键的信息又不早说。
如果tcprelay.py代码中没有关键需要保密的东西,可以考虑公开一下看看代码流程是怎么处理参数的。
作者: czjt1234 时间: 2016-12-12 07:03
- start cmd.exe /k echo -t 22:23 -u 6edcd1cdd9f2aced282a8e4cvbnc3310df76342e>c:\1.txt
- start notepad.exe c:\1.txt
复制代码
start 传递参数是没问题的
估计是这个tcprelay.py处理参数时比较死板
那你这样试试呢- @echo off
- start cmd.exe /k tcprelay.py -t 8000:8001
- start cmd.exe /k tcprelay.py -t 8000:8002
- start cmd.exe /k tcprelay.py -t 8000:8003
- start cmd.exe /k tcprelay.py -t 8000:8004
- start cmd.exe /k tcprelay.py -t 8000:8005
复制代码
作者: maluwang 时间: 2016-12-12 15:32
回复 15# codegay
Python 2.6.4
#!/usr/bin/python
# -*- coding: utf-8 -*-
#
# tcprelay.py - TCP connection relay for usbmuxd
#
# Copyright (C) 2009 Hector Martin "marcan" <hector@marcansoft.com>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 2 or version 3.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
import usbmux
import SocketServer
import select
from optparse import OptionParser
import sys
import traceback
class SocketRelay(object):
def __init__(self, a, b, maxBuffer = 65535):
self.a = a
self.b = b
self.atob = ""
self.btoa = ""
self.maxBuffer = maxBuffer
def handle(self):
while True:
rlist = []
wlist = []
xlist = [self.a, self.b]
if self.atob:
wlist.append(self.b)
if self.btoa:
wlist.append(self.a)
if len(self.atob) < self.maxBuffer:
rlist.append(self.a)
if len(self.btoa) < self.maxBuffer:
rlist.append(self.b)
rlo, wlo, xlo = select.select(rlist, wlist, xlist)
if xlo:
return
if self.a in wlo:
n = self.a.send(self.btoa)
self.btoa = self.btoa[n:]
if self.b in wlo:
n = self.b.send(self.atob)
self.atob = self.atob[n:]
if self.a in rlo:
s = self.a.recv(self.maxBuffer - len(self.atob))
if not s:
return
self.atob += s
if self.b in rlo:
s = self.b.recv(self.maxBuffer - len(self.btoa))
if not s:
return
self.btoa += s
#print "Relay iter: %8d atob, %8d btoa, lists: %r %r %r"%(len(self.atob), len(self.btoa), rlo, wlo, xlo)
class TCPRelay(SocketServer.BaseRequestHandler):
def handle(self):
print "Incoming connection to {0}".format(self.server.server_address[1])
print "Waiting for devices..."
if len(self.server.devices) == 0:
print "No device found"
self.request.close()
return
dev = None
if options.udid is None:
# Default to the first available device if no udid was specified
dev = self.server.devices[0]
else:
for device in self.server.devices:
# Look for the specified device UDID
if device.serial == options.udid:
dev = device
break
if not dev:
raise Exception("Could not detect specified device UDID: {0}".format(repr(options.udid)))
print "Connecting to device {0}".format(dev)
dsock = mux.connect(dev, self.server.remotePort)
lsock = self.request
print "Connection established, relaying data"
try:
fwd = SocketRelay(dsock, lsock, self.server.bufferSize * 1024)
fwd.handle()
finally:
dsock.close()
lsock.close()
print "Connection closed"
class TCPServer(SocketServer.TCPServer):
allow_reuse_address = True
class ThreadedTCPServer(SocketServer.ThreadingMixIn, TCPServer):
pass
parser = OptionParser(usage="usage: %prog [OPTIONS] [Host:]RemotePort[ocalPort] [[Host:]RemotePort[:LocalPort]]...")
parser.add_option("-t", "--threaded", dest='threaded', action='store_true', default=False,
help="use threading to handle multiple connections at once")
parser.add_option("-b", "--bufsize", dest='bufsize', action='store', metavar='KILOBYTES', type='int', default=128,
help="specify buffer size for socket forwarding")
parser.add_option("-s", "--socket", dest='sockpath', action='store', metavar='PATH', type='str', default=None,
help="specify the path of the usbmuxd socket")
parser.add_option("-u", "--udid", dest='udid', action='store', metavar='UDID', type='str', default=None,
help="specify the device's udid if multiple devices are connected")
options, args = parser.parse_args()
serverClass = ThreadedTCPServer if options.threaded else TCPServer
if len(args) == 0:
parser.print_help()
sys.exit(1)
ports = []
mux = usbmux.USBMux(options.sockpath)
print "Waiting for devices..."
mux.process(0.1)
lastLength = len(mux.devices)
while True:
mux.process(0.1)
if len(mux.devices) == lastLength: break
lastLength = len(mux.devices)
devices = mux.devices
print "Devices:\n{0}".format("\n".join([str(d) for d in devices]))
for arg in args:
try:
if ':' in arg:
remotePort, localPort = arg.rsplit(":", 1)
host, remotePort = remotePort.split(":") if len(remotePort.split(":")) > 1 else ("localhost", remotePort)
remotePort = int(remotePort)
localPort = int(localPort)
ports.append((host, remotePort, localPort))
else:
ports.append(("localhost", int(arg), int(arg)))
except:
parser.print_help()
sys.exit(1)
servers = []
for host, remotePort, localPort in ports:
print "Forwarding local port {0}:{1} to remote port {2}".format(host, localPort, remotePort)
server = serverClass((host, localPort), TCPRelay)
server.remotePort = remotePort
server.bufferSize = options.bufsize
server.devices = devices
servers.append(server)
alive = True
while alive:
try:
rl, wl, xl = select.select(servers, [], [])
for server in rl:
server.handle_request()
except:
traceback.print_exc()
alive = False
作者: maluwang 时间: 2016-12-12 20:34
回复 16# czjt1234
现在每个批处理的代码如下- tcprelay.py -t 8000:8001 -u 32145512fdee4bfdsfsdfsdsdas9c46c579cbd7
复制代码
依次打开每个批处理显示如下
根据你提供的代码合并到一个批处理代码如下- @echo off
- start cmd.exe /k tcprelay.py -t 8000:8001 -u 123451cdd9f2aced282a8e43ba2c3310df76342e
- start cmd.exe /k tcprelay.py -t 8000:8002 -u 123451cdd9f2aced282a8e43ba2c3310df123457
- start cmd.exe /k tcprelay.py -t 8000:8003 -u 543211cdd9f2aced282a8e43ba2c3310df123341
- start cmd.exe /k tcprelay.py -t 8000:8004 -u 654321cdd9f2aced282a8e43ba2c3310df122134
- start cmd.exe /k tcprelay.py -t 8000:8005 -u 457321cdd9f2aced282a8e43ba2c3310df12fdsf
复制代码
打开后显示如下
作者: maluwang 时间: 2016-12-12 20:39
回复 9# /zhqsystem/zhq
批处理1
tcprelay.py -t 8000:8001 -u 32145512fdee4bfdsfsdfsdsdas9c46c579cbd7
复制代码
批处理2
tcprelay.py -t 8000:8002 -u 32145512fdee4bd66dasdas9c46c579cbd7
复制代码
批处理3
tcprelay.py -t 8000:8003 -u asddasfg10eb755bd5c8025bd6596f89eb91df6b5
复制代码
批处理4
tcprelay.py -t 8000:8004 -u asddasfg10efdsfsdghhh5bd6596f89eb91df6b5
复制代码
批处理5
tcprelay.py -t 8000:8005 -u a233456g10eb755bd5c8025bd6596f89eb91df6b5
复制代码
......
请问这个怎么合并到一个批处理里?谢谢
作者: czjt1234 时间: 2016-12-12 20:41
弄个vbs试试呢- Set oWshShell = CreateObject("WScript.Shell")
- oWshShell.Run "tcprelay.py -t 8000:8001 -u 123451cdd9f2aced282a8e43ba2c3310df76342e"
- oWshShell.Run "tcprelay.py -t 8000:8002 -u 123451cdd9f2aced282a8e43ba2c3310df123457"
- oWshShell.Run "tcprelay.py -t 8000:8003 -u 543211cdd9f2aced282a8e43ba2c3310df123341"
- oWshShell.Run "tcprelay.py -t 8000:8004 -u 654321cdd9f2aced282a8e43ba2c3310df122134"
- oWshShell.Run "tcprelay.py -t 8000:8005 -u 457321cdd9f2aced282a8e43ba2c3310df12fdsf"
复制代码
再不行就只有改py文件了
作者: maluwang 时间: 2016-12-12 21:33
回复 20# czjt1234
运行了这段代码闪退。
我把PY文件通过QQ发你了。帮我看看,谢谢!
作者: /zhqsystem/zhq 时间: 2016-12-13 02:29
回复 19# maluwang
- set "devicecode=32145512fdee4bfdsfsdfsdsdas9c46c579cbd7;32145512fdee4bd66dasdas9c46c579cbd7;asddasfg10eb755bd5c8025bd6596f89eb91df6b5;asddasfg10efdsfsdghhh5bd6596f89eb91df6b5;a233456g10eb755bd5c8025bd6596f89eb91df6b5"
- set "devicecode_n="&&for %%n in (!devicecode!)do set/a "devicecode_n+=1"&&set "devicecode_n_!devicecode_n!=%%~n"
- set "n="&&for /l %%n in (8001,1,8005)do (set/a "n+=1"
- for /f "delims=" %%z in ("!n!")do (
- set "_new=start^/i ^"%%~n^" ^"%~dp0tcprelay.py^" -t 8000:%%~n !devicecode_n_%%~z!^^^&^^^&^pause"
- start "%%~n" "%systemroot%\system32\cmd.exe" /c !_new!
- )
- )
复制代码
作者: codegay 时间: 2016-12-13 03:02
搜索了一下,tcprelay.py 的项目在这里 https://github.com/nabla-c0d3/multcprelay
作者: codegay 时间: 2016-12-13 04:52
本帖最后由 codegay 于 2016-12-13 05:26 编辑
我验证了一下,不管加不加start 程序代码中已经得到了UUID。
也就是说不管是参数的传递还是参数处理上都没有问题,只是表面上显示不一样而已。你们不要纠结了。
作者: maluwang 时间: 2016-12-13 17:15
回复 22# /zhqsystem/zhq
测试了,运行就闪退了,没有驻留CMD窗口
作者: maluwang 时间: 2016-12-13 17:25
回复 24# codegay
你说的很对,之前看到没有设备号 就以为还和之前一样不行。
仔细测试后发现完全和你说的一样,非常感谢。- start cmd.exe /k tcprelay.py -t 8000:8001 -u 123451cdd9f2aced282a8e43ba2c3310df76342e
- start cmd.exe /k tcprelay.py -t 8000:8002 -u 123451cdd9f2aced282a8e43ba2c3310df123457
- start cmd.exe /k tcprelay.py -t 8000:8003 -u 543211cdd9f2aced282a8e43ba2c3310df123341
- start cmd.exe /k tcprelay.py -t 8000:8004 -u 654321cdd9f2aced282a8e43ba2c3310df122134
- start cmd.exe /k tcprelay.py -t 8000:8005 -u 457321cdd9f2aced282a8e43ba2c3310df12fdsf
复制代码
是用这段代码就可以了。
这个运行后,会运行5个独立CMD窗口
如何让只在一个CMD窗口显示呢?或者干脆不让显示,太多窗口好烦。。
作者: codegay 时间: 2016-12-13 21:38
回复 26# maluwang
文件名改为pyw
start xxx.pyw
或者start pythonw xx.py
然后看进程中是驻留有5个pythonw.exe进程。
如果不行,搜索本站 隐藏窗口。
另一个可行的方式是改python 代码变成多进程的方式执行。但是我这里没苹果设备,没有办法测试。
作者: maluwang 时间: 2016-12-14 02:28
回复 27# codegay
非常感谢耐心解答。确实好使。
请问运行后有N多个 pythonw.exe 进程 这个进程可以变为1个吗?共用一个?
作者: maluwang 时间: 2016-12-14 02:37
回复 27# codegay
这个批处理可以重复运行,每重复运行一次,就多出对应的N条进程。有没有办法开启过的不能再开启或者合并到一起用一个进程呢?
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |