.bat 文件不工作 |当 .bat 文件为 运行 时显示无效语法 | Python 3.4.0
.bat file doesn't work | Shows invalid syntax when .bat file is run | Python 3.4.0
.bat文件:
@py C:\Users\Universal Sysytem\Desktop\Python Scripts (Automate the Boring Stuff)\Automate the Boring Stuff with Python\TestProgram(.bat batch file and shebang line usecase).py %*
@pause
.py文件:
#! python3
print('Hello World, this is a test program for showing the use of .bat batch files, and the role of the shebang line.')
当我在 PowerShell 或命令提示符中 运行 .bat 文件时:
PS C:\Users\Universal Sysytem> py "C:\Users\Universal Sysytem\Desktop\Python Scripts (Automate the Boring Stuff)\Automate the Boring Stuff with Python\BatchFile-TestProgram.bat"
File "C:\Users\Universal Sysytem\Desktop\Python Scripts (Automate the Boring Stuff)\Automate the Boring Stuff with Python\BatchFile-TestProgram.bat", line 1
@py C:\Users\Universal Sysytem\Desktop\Python Scripts (Automate the Boring Stuff)\Automate the Boring Stuff with Python\TestProgram(.bat batch file and shebang line usecase).py %*
^
SyntaxError: invalid syntax
P.S:
- 各个文件(.py 和.bat)的各自路径没有任何错误。
- 我也试过
@py.exe
而不是 @py
- 在环境变量中,PATH变量也相应设置
- 我还尝试从 .py 文件中删除 %*
- 参考:Book: Automate the Boring Stuff with Python (Appendix B)
如何解决这个问题?
不要使用 py
标签,只需简单地写下 .bat
文件的文件路径:
C:\My\Path\To\stack.py
pause
如果您使用 .bat
文件来 运行 此代码:
print("Hello")
输出将是:
C:\My\Path\To\stack.py>C:\My\Path\To\stack.py\stack.py
Hello
C:\My\Path\To\stack.py>pause
Press any key to continue . . .
问题在于
py "C:\...\BatchFile-TestProgram.bat"
将尝试使用 Python 解释器 运行 .bat
文件。这是一个错误,因为 Python 解释器理解 Python 语言但不理解 .bat
/Powershell 语言,.bat
文件是用这种语言编写的。
@py C:\Users\...
已经无效 Python 语法,因为 @py
被视为装饰器,装饰器后面不能跟符号名称如 C
.
如何解决这个问题:运行 使用 Powershell 的 .bat
文件(假设 .bat
文件本身是正确的)或者完全简单地丢弃 .bat
文件运行:
py "C:\Users\Universal Sysytem\Desktop\Python Scripts (Automate the Boring Stuff)\Automate the Boring Stuff with Python\TestProgram(.bat batch file and shebang line usecase).py"
如果您希望 Python 代码暂停(与 @pause
一样),您可以在脚本末尾请求用户输入:
print("This is my script, hello!")
# run some code...
# wait for input, then exit
input("Press ENTER to exit...")
各位,我终于解决了!非常感谢大家,回答我的问题或通过评论提供反馈!我非常感谢您抽出宝贵时间来帮助像我这样的菜鸟。谢谢!:)
好的,所以解决方案:
首先,我对我的 .bat file/batch 文件做了一点改动。 我用双引号 ("):
将 .py 文件的路径括起来
@py "C:\Users\Universal Sysytem\Desktop\Python Scripts (Automate the Boring Stuff)\Automate the Boring Stuff with Python\TestProgram(.bat batch file and shebang line usecase).py"
@pause
最后,我只是 运行 .bat 文件,而不是 运行 在其位置路径的开头使用 py 设置 .bat 文件. 在我的 PowerShell 中,我移动到 .bat 文件的目录,然后 运行 .bat 文件:
.\BatchFile-TestProgram.bat
它返回了正确的输出:
Hello World, this is a test program for showing the use of .bat batch files, and the role of the shebang line.
Press any key to continue . . .
此外,我能够从 运行 对话框 (WIN + R) 运行 批处理文件。输出与直接在 PowerShell 中 运行 批处理文件相同。我刚刚输入了批处理文件的完整路径,用双引号将其括起来:
"c:\users\Universal Sysytem\Desktop\Python Scripts (Automate the Boring Stuff)\Automate the Boring Stuff with Python\BatchFile-TestProgram.bat"
我学到了什么:
py
执行在Python 中写入的文件。它不执行 .bat 文件,因为 Python 解释器不理解写入 .bat 文件的 CMD 语法。
- 重要的是要确保使用引号(双引号或单引号)将路径括起来,尤其是在将路径写入文件夹或文件时单词之间有空格时。
当然,如果您在命令提示符下,则不能使用单引号括起路径,因为 CMD 不会将单引号视为常规字符。
- '@' 告诉命令提示符在 运行 运行程序(.py 文件)时不要显示整行(路径或命令 'pause'),而只是执行程序。
.bat文件:
@py C:\Users\Universal Sysytem\Desktop\Python Scripts (Automate the Boring Stuff)\Automate the Boring Stuff with Python\TestProgram(.bat batch file and shebang line usecase).py %*
@pause
.py文件:
#! python3
print('Hello World, this is a test program for showing the use of .bat batch files, and the role of the shebang line.')
当我在 PowerShell 或命令提示符中 运行 .bat 文件时:
PS C:\Users\Universal Sysytem> py "C:\Users\Universal Sysytem\Desktop\Python Scripts (Automate the Boring Stuff)\Automate the Boring Stuff with Python\BatchFile-TestProgram.bat"
File "C:\Users\Universal Sysytem\Desktop\Python Scripts (Automate the Boring Stuff)\Automate the Boring Stuff with Python\BatchFile-TestProgram.bat", line 1
@py C:\Users\Universal Sysytem\Desktop\Python Scripts (Automate the Boring Stuff)\Automate the Boring Stuff with Python\TestProgram(.bat batch file and shebang line usecase).py %*
^
SyntaxError: invalid syntax
P.S:
- 各个文件(.py 和.bat)的各自路径没有任何错误。
- 我也试过
@py.exe
而不是@py
- 在环境变量中,PATH变量也相应设置
- 我还尝试从 .py 文件中删除 %*
- 参考:Book: Automate the Boring Stuff with Python (Appendix B)
如何解决这个问题?
不要使用 py
标签,只需简单地写下 .bat
文件的文件路径:
C:\My\Path\To\stack.py
pause
如果您使用 .bat
文件来 运行 此代码:
print("Hello")
输出将是:
C:\My\Path\To\stack.py>C:\My\Path\To\stack.py\stack.py
Hello
C:\My\Path\To\stack.py>pause
Press any key to continue . . .
问题在于
py "C:\...\BatchFile-TestProgram.bat"
将尝试使用 Python 解释器 运行 .bat
文件。这是一个错误,因为 Python 解释器理解 Python 语言但不理解 .bat
/Powershell 语言,.bat
文件是用这种语言编写的。
@py C:\Users\...
已经无效 Python 语法,因为 @py
被视为装饰器,装饰器后面不能跟符号名称如 C
.
如何解决这个问题:运行 使用 Powershell 的 .bat
文件(假设 .bat
文件本身是正确的)或者完全简单地丢弃 .bat
文件运行:
py "C:\Users\Universal Sysytem\Desktop\Python Scripts (Automate the Boring Stuff)\Automate the Boring Stuff with Python\TestProgram(.bat batch file and shebang line usecase).py"
如果您希望 Python 代码暂停(与 @pause
一样),您可以在脚本末尾请求用户输入:
print("This is my script, hello!")
# run some code...
# wait for input, then exit
input("Press ENTER to exit...")
各位,我终于解决了!非常感谢大家,回答我的问题或通过评论提供反馈!我非常感谢您抽出宝贵时间来帮助像我这样的菜鸟。谢谢!:)
好的,所以解决方案:
首先,我对我的 .bat file/batch 文件做了一点改动。 我用双引号 ("):
将 .py 文件的路径括起来@py "C:\Users\Universal Sysytem\Desktop\Python Scripts (Automate the Boring Stuff)\Automate the Boring Stuff with Python\TestProgram(.bat batch file and shebang line usecase).py"
@pause
最后,我只是 运行 .bat 文件,而不是 运行 在其位置路径的开头使用 py 设置 .bat 文件. 在我的 PowerShell 中,我移动到 .bat 文件的目录,然后 运行 .bat 文件:
.\BatchFile-TestProgram.bat
它返回了正确的输出:
Hello World, this is a test program for showing the use of .bat batch files, and the role of the shebang line.
Press any key to continue . . .
此外,我能够从 运行 对话框 (WIN + R) 运行 批处理文件。输出与直接在 PowerShell 中 运行 批处理文件相同。我刚刚输入了批处理文件的完整路径,用双引号将其括起来:
"c:\users\Universal Sysytem\Desktop\Python Scripts (Automate the Boring Stuff)\Automate the Boring Stuff with Python\BatchFile-TestProgram.bat"
我学到了什么:
py
执行在Python 中写入的文件。它不执行 .bat 文件,因为 Python 解释器不理解写入 .bat 文件的 CMD 语法。- 重要的是要确保使用引号(双引号或单引号)将路径括起来,尤其是在将路径写入文件夹或文件时单词之间有空格时。 当然,如果您在命令提示符下,则不能使用单引号括起路径,因为 CMD 不会将单引号视为常规字符。
- '@' 告诉命令提示符在 运行 运行程序(.py 文件)时不要显示整行(路径或命令 'pause'),而只是执行程序。