Python 当使用.bat文件运行.py脚本时,%*修饰符的实际用途是什么?

Python 当使用.bat文件运行.py脚本时,%*修饰符的实际用途是什么?,python,batch-file,Python,Batch File,我最近学习了如何通过双击.bat文件来执行python脚本。假设我的脚本名为foo.py,.bat文件应如下所示: python.exe C:\Users\Name\Desktop\Example\foo.py %* 我很难理解的是最后的%*声明。我到底为什么需要它?我在没有它的情况下测试了这个文件,它运行得很好 答案“%*传递所有参数”对我来说有点模糊,我已经阅读了一些关于批处理脚本的理论,并且理解了修饰符的一些用法,但是我无法将其与Python案例联系起来。如果有人能给我一些例子来说明运行

我最近学习了如何通过双击.bat文件来执行python脚本。假设我的脚本名为foo.py,.bat文件应如下所示:

python.exe C:\Users\Name\Desktop\Example\foo.py %*
我很难理解的是最后的%*声明。我到底为什么需要它?我在没有它的情况下测试了这个文件,它运行得很好

答案“%*传递所有参数”对我来说有点模糊,我已经阅读了一些关于批处理脚本的理论,并且理解了修饰符的一些用法,但是我无法将其与Python案例联系起来。如果有人能给我一些例子来说明运行python
.bat
文件时使用%*和不使用%*的区别,我会很高兴,这样我才能最终理解为什么真正需要它。

main.cmd:

@echo关闭
回显批处理文件参数:%*
python.exe foo.py%*
foo.py:

导入系统 print('python_args:',sys.argv[1:]) 测试命令1

main.cmd

输出:

批处理文件参数:
python_参数:[]

没有传递批处理文件参数,因此
%*
未定义,这就是您什么也看不到的原因。python脚本没有打印任何参数,因为没有传递任何参数<代码>[]是一个空列表

测试命令2

main.cmd 1 2 3 4

输出:

批处理文件参数:1 2 3 4
python_参数:['1','2','3','4']

%*
被替换并显示所有批处理文件参数
1 2 3 4
。 参数被传递到python脚本,它显示
['1','2','3','4']

因此,传递给python脚本的
%*
可以用于上述两个测试


我到底为什么需要它?我在没有它的情况下测试了这个文件,它运行得很好

foo.py
如果未传递参数,可能会使用默认值,这就是它不会抱怨的原因

考虑python脚本是否有一行,例如
var=sys.argv[1]
。我将把它添加到python代码中进行测试

foo.py:

导入系统 print('python_args:',sys.argv[1:]) var=sys.argv[1] 测试命令3

main.cmd

输出:

批处理文件参数: python_参数:[] 回溯(最近一次呼叫最后一次): 文件“foo.py”,第3行,在 var=sys.argv[1] 索引器:列表索引超出范围
哎哟,它向索引器抱怨<代码>%*可能很重要,正如回溯所示。没有传递的参数类似于从批处理文件中删除
%*

批处理文件调用的所有参数都被转发到(Python)程序。不需要理论。“run_this.bat a b c d”将把4个字母参数传递给(Python)程序,或可能提供的0..N。只有(Python)程序使用这些参数时,这才重要。Python作为最后一种被调用的程序/语言本身是不相关的。您可以有任意多个参数。受32K命令行的限制。但是,批处理仅使前九个参数的使用变得容易(因为
%0
是批处理文件,而不是参数)。对于九个以上的用户,您需要使用
shift
命令(这很麻烦),或者自己解析它。