首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.bat文件不工作当.bat文件运行时.bat文件显示无效语法

.bat文件不工作当.bat文件运行时.bat文件显示无效语法
EN

Stack Overflow用户
提问于 2021-02-01 09:22:41
回答 3查看 694关注 0票数 0

.bat文件:

代码语言:javascript
复制
@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文件:

代码语言:javascript
复制
#! python3

print('Hello World, this is a test program for showing the use of .bat batch files, and the role of the shebang line.')

当我在.bat或命令提示符中运行PowerShell文件时:

代码语言:javascript
复制
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.:

我如何解决这个问题?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-02-01 11:27:34

伙计们,我终于解决了!非常感谢各位,他们回答了我的问题,或者通过评论给出了反馈!我非常感谢你宝贵的时间来帮助像我这样的菜鸟。(谢谢!)

好吧,所以解决办法是:

首先,我对我的.bat文件/批处理文件做了一些修改。I在双引号(“)中封装了.py文件的路径。

代码语言:javascript
复制
@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的.bat文件,而是运行.bat文件。在PowerShell中,移到.bat文件的目录中,然后运行.bat文件:

代码语言:javascript
复制
.\BatchFile-TestProgram.bat

它返回正确的输出:

代码语言:javascript
复制
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 . . .

还可以从run Dialog (WIN + R)运行批处理文件。输出与直接在PowerShell中运行批处理文件相同。我刚刚输入了批处理文件的完整路径,并将其用双引号括起来:

代码语言:javascript
复制
"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文件)时不显示整行(路径或命令“暂停”),而只是执行程序。
票数 0
EN

Stack Overflow用户

发布于 2021-02-01 09:29:42

问题是

代码语言:javascript
复制
py "C:\...\BatchFile-TestProgram.bat"

将尝试使用Python解释器运行.bat文件。这是一个错误,因为Python解释器理解Python语言,但不理解用.bat文件编写的/Powershell语言。

@py C:\Users\...已经是无效的Python语法了,因为@py被当作装饰器来处理,并且装饰器后面不能跟着像C这样的符号名。

如何解决这个问题:使用Powershell运行.bat文件(假设.bat文件本身是正确的),或者完全丢弃.bat文件,只需运行:

代码语言:javascript
复制
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),您可以在脚本末尾请求用户输入:

代码语言:javascript
复制
print("This is my script, hello!")
# run some code...

# wait for input, then exit
input("Press ENTER to exit...")
票数 1
EN

Stack Overflow用户

发布于 2021-02-01 09:25:08

不要使用py标记,只需简单地将文件路径写到.bat文件:

代码语言:javascript
复制
C:\My\Path\To\stack.py
pause

如果使用.bat文件运行此代码:

代码语言:javascript
复制
print("Hello")

产出如下:

代码语言:javascript
复制
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 . . .
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65990074

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档