在 Windows Batch 脚本中执行多行 Python 代码

问题描述 投票:0回答:2

我想在 Windows Batch 脚本中使用多行 python 语句。

比如我的BAT脚本是:

@echo off
echo "Executing Python Code..."
goto python_code

:python_code_back
echo "Executed Python Code!"

pause
exit()

:python_code
python -c print("""Python code running""")
goto python_code_back

python -c
对于单个语句效果很好。但是让我的python代码嵌入的是:

import random
num = input("Enter Number: ")
num = int(num)
if num%2 == 0:
  print("Even")
else:
  print("Odd")
  
exit()

如何将此Python代码嵌入到我的Windows批处理脚本中,而不调用另一个Python脚本或创建临时Python文件?

我已经经历过一些选择:

  1. 使用

    python -c
    和分号:我如何使用 if 之类的代码 上面的陈述?如果有办法的话,人们可能仍然想要干净的代码 多行,但我希望得到答案。

  2. 我可以运行

    python
    并找到一种将命令发送到解释器的方法吗?也许使用子流程?

  3. 有什么方法可以构建一个包含 python 代码的多行字符串,然后将其发送到 python 解释器或 python 命令吗?

  4. 在 bash 中我们可以使用 EOF 来保持多行干净。 BAT中有没有类似的方法?我认为不会,因为人们对此提出了许多解决方法

  5. 是否可以使用 Batch 专门解释的

    '''

    (三个单引号)或 
    """
    (三个双引号)语法?喜欢
    这里

python windows batch-file scripting
2个回答
4
投票
尝试这样:

0<0# : ^ ''' @echo off echo batch code python %~f0 %* exit /b 0 ''' import random import sys def isOdd(): print("python code") num = input("Enter Number: ") num = int(num) if num%2 == 0: print("Even") else: print("Odd") def printScriptName(): print(sys.modules['__main__'].__file__) eval(sys.argv[1] + '()') exit()
使用示例:

call pythonEmbeddedInBatch.bat isOdd call pythonEmbeddedInBatch.bat printScriptName
第一行将是Python中的布尔表达式,但批量重定向到空标签。其余的批处理代码将在多行 python 注释中。


0
投票
使用这个简单的 python gui 将文件夹中的所有 py 脚本转换为 bat 文件:

0<0# : ^ ''' @echo off set script=%~f0 python -x "%script%" %* exit /b 0/b 0 ''' from tkinter import * from tkinter import filedialog import os def browse_folder(): foldername = filedialog.askdirectory(initialdir=input_entry.get()) input_entry.delete(0, END) input_entry.insert(0, foldername) def convert_files(): input_path = input_entry.get() if os.path.isdir(input_path): # Input path is a directory, so convert all Python files in the directory for filename in os.listdir(input_path): if filename.endswith(".py"): convert_single_file(os.path.join(input_path, filename)) def convert_single_file(filename): if filename: with open(filename, 'r') as f: content = f.read() # Add the batch file code at the beginning of the file content = '0<0# : ^\n\'\'\' \n@echo off\nset script=%~f0\npython -x "%script%" %*\nexit /b 0\n\'\'\'\n' + content # Get the base name of the original file base_name, _ = os.path.splitext(os.path.basename(filename)) # Save the modified content as a batch file with open(os.path.join(os.path.dirname(filename), f"{base_name}.bat"), 'w') as f: f.write(content) root = Tk() root.title("Python to Batch Converter") # Scale the GUI by a factor of 4 root.tk.call('tk', 'scaling', 4.0) input_label = Label(root, text="Input folder:") input_label.pack() input_entry = Entry(root) input_entry.pack() browse_folder_button = Button(root, text="Browse Folder", command=browse_folder) browse_folder_button.pack() convert_button = Button(root, text="CONVERT", command=convert_files) convert_button.pack() root.mainloop()

© www.soinside.com 2019 - 2024. All rights reserved.