我正在使用此代码:
test.py:
cmd_line = str('C:\mybat.bat') + " "+str('C:\')+" "+str('S:\Test\myexe.exe')+" "+str('var4')+" "+str('var5')+" "+str('var6')+" "+str('var7')+ " "+str('var8') + " "+str('var9')+ " "+ str('var10')
process = subprocess.Popen(cmd_line, stdin=PIPE, stderr=None, stdout=None, shell=True)
process.communicate()
retcode = process.returncode
mybat.bat:
cd /d %1
%2 %3 %4 %5 %6 %7 %8 %9 %10
它的工作正常,直到参数:“var10”,因为我不知道为什么蝙蝠对%1采取相同的值,而不是%10,因为:
... >cd /d C:\
C:\> S:\Test\myexe.exe var4 var5 var6 var7 var8 var9 C:\0
我想读取最后一个参数var10,而不是C:\ 0,因为它正在获取var1的值并仅添加0,但它应该是var10。
谢谢!
答案 0 :(得分:2)
批处理文件仅支持%1
到%9
。要读取第10个参数(以及下一个和下一个参数),您必须使用该命令(可能更多次)
shift
改变参数:
10th
参数%9
,%9
至%8
等等:
+--------------+----+----+----+----+----+----+----+----+----+----+------+
| Before shift | %0 | %1 | %2 | %3 | %4 | %5 | %6 | %7 | %8 | %9 | 10th |
+--------------+----+----+----+----+----+----+----+----+----+----+------+
| After shift | x | %0 | %1 | %2 | %3 | %4 | %5 | %6 | %7 | %8 | %9 |
+--------------+----+----+----+----+----+----+----+----+----+----+------+
(x表示原始的%0
现在无法访问,因此如果您需要,则必须在 shift
语句之前使用。)
现在,您可以将10th
参数用作%9
,将第9个参数用作%8,依此类推。
所以更改批处理文件:
cd /d %1
shift
%1 %2 %3 %4 %5 %6 %7 %8 %9
答案 1 :(得分:1)
为了结束这个问题,我决定只使用一个长参数,因为参数可以是可选的,我找不到向bat发送空参数的方法。 shift命令有效,但如果你有一定数量的参数,在我的情况下,参数的数量可以是6,8,12,可以变化,sooo,我现在使用的代码:
test.py
main_cmd_line = [ 'C:\mybat.bat' , 'C:\' , 'S:\Test\myexe.exe' ]
variables = var1 + ' ' + var2 + ' ' + var3
parameters_cmd_line = shlex.split( "'" + variables.strip() + "'")
cmd_line = main_cmd_line + parameters_cmd_line
process = subprocess.Popen(cmd_line, stdin=PIPE, stderr=None, stdout=None, shell=True)
process.communicate()
retcode = process.returncode
mybat.bat
set go_to_path=%1
set exe_file=%2
set parameters=%3
cd /d %go_to_path%
%exe_file% "%parameters%"
“%parameters%”中的引号将丢弃变量%3附带的引号,请记住:“”以转义批处理文件中的双引号。