单击时Python从批处理文件运行,但拖放文件时不运行

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

我在从 Windows 批处理文件运行非常简单的 Python 脚本时遇到问题。

批次代码是:

"C:\Python27\python.exe" "V34_File_Converter.py" %*
pause

其中“V34_File_Converter.py”文件位于与批处理文件相同的文件夹中。

Python 代码是:

import os,sys
import psse34
import psspy

print('we are in the program')

args_num = len(sys.argv) - 1

psspy.psseinit()

for f_name in sys.argv[1:]:

    print f_name

    psspy.read(0,f_name)
    f_name_out = os.path.splitext(f_name)[0] + "_V34.RAW"
    psspy.rawd_2(0,1,[1,1,1,0,0,0,0],0,f_name_out)

主要问题是当我双击批处理文件时,程序运行良好,打印第一条消息并初始化 PSSE 程序。但是,当我将文件拖放到批处理脚本上时,出现以下错误:

C:\Python27\python.exe: can't open file 'V34_File_Converter.py': [Errno 2] No such file or directory 

这很奇怪,考虑到如果没有传递其他参数,文件就没有问题。

感谢您的帮助!

windows python-2.7 batch-file
1个回答
0
投票

Python脚本文件

V34_File_Converter.py
显然位于批处理文件的目录中,因为批处理文件中引用了没有文件路径的文件。在双击批处理文件开始
cmd.exe
处理批处理文件之前,批处理文件目录被 Windows 设置为当前目录。有两个例外:

  1. 批处理文件是使用 以管理员身份运行 启动的,而不是双击它,通常会导致将
    %SystemRoot%\System32
    设置为当前目录。
  2. 双击的批处理文件存储在使用 UNC 路径访问的网络资源上,在这种情况下,
    %SystemRoot%
    默认设置为当前目录。

但是批处理文件通常也可以从任何其他目录执行。因此,建议在批处理文件中引用其他文件及其完整限定文件名。

打开 命令提示符,运行

call /?
并阅读输出帮助,解释如何从批处理文件中引用批处理文件参数。参数 0 始终是用于开始处理批处理文件的字符串。

这里的解决方案是:

"C:\Python27\python.exe" "%~dp0V34_File_Converter.py" %*

%~dp0
引用参数 0 的驱动器和路径,即批处理文件本身,即批处理文件目录的路径,该目录显然还包含 Python 脚本文件。用
%~dp0
引用的路径字符串始终以反斜杠结尾。因此,在此路径与文件或文件夹名称连接时不应使用额外的反斜杠。

另请参阅:

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