【发布时间】:2021-08-01 11:07:45
【问题描述】:
我有一个通过 .bat(批处理)文件调用的 python 脚本。为了使 Python 脚本正常工作,我在 .bat 文件中传递了硬编码的参数。但我需要动态传递参数,因为每次参数的值(名称)都会不同。
python 脚本的逻辑不受我的问题的影响,因为它可以正常工作。这里的问题是如何在 .bat 文件中动态传递此类参数,以便在同一个 .bat 文件中指定的 python 脚本将排除此类动态传递的参数。
sys.argv[1] 和 sys.argv[1] 是 python 文件中的参数(参见下面的代码),它们是硬编码并在 .bat 文件中传递的。但我需要动态传递参数(因为名称会不同)。
这是可以正常工作的 .bat 文件,因为参数是硬编码的。
python "E:\Export\Test.py" "E:\Config\Test_Upload_10-15-2020.csv" "./Test_Upload_10-15-2020.csv" "E:\BulkInsert_DataAcquisition\SAM\Log"
参数是完全限定的文件路径和文件名。 “E:\Export\Test_Upload_10-15-2020.csv”是 sys.argv[1] “Test_Upload_10-15-2020.csv”是 sys.argv[2]
所以我需要自动化它以允许处理以“Test_Upload_”开头的每个csv文件。
我试图用 .bat 中的“”符号替换日期戳(见下面的代码) python "E:\Export\TEST.py" "E:\Config\Test_Upload_.csv" "./Test_Upload_*.csv" "E:\logFolderPath"
但是执行这个 .bat 文件时出现错误
发生错误:[错误 123] 文件名、目录名或卷标语法不正确:'E:\Export\Test_Upload_*.csv'
它可以使用确切的文件名“Test_10-15-2020.csv”
只要我在参数中传递准确的 CVC 名称,下面的 Python 脚本就可以正常工作
import pysftp
import sys
import datetime
if __name__ == "__main__":
localFilePath = sys.argv[1] #"\\MyDBServer\E:\Config\Test_Upload_%.csv" % name
remoteFilePath = sys.argv[2] #"./Test_Upload_%.csv" % name.csv"
logFolderPath = sys.argv[3] #"E:\logFolderPath"
myHostname = "SFTP.MyWebSite.com"
myUsername = "MyLogin"
myPassword = "MyPassword"
try:
with pysftp.Connection(host=myHostname, username=myUsername, password=myPassword) as sftp:
print ("Connection succesfully stablished ... ")
sftp.put(localFilePath, remoteFilePath)
except Exception as e:
logfile = open(logFolderPath+"\Error_"+datetime.datetime.now().strftime("%Y%m%d_%H%M%S")+".log", "w")
logfile.write("Error occured: "+ str(e))
print(str(e))
logfile.close
sys.exit(1)
【问题讨论】:
-
感谢您更新您的问题。不过,这似乎是一个简单的副本;如果您希望 Python 扩展通配符,则必须在代码中执行此操作,例如在 stackoverflow.com/questions/3348753/… 中,即使通配符字符串是从命令行而不是脚本中填充的。
-
在我需要再次创建的重复问题中,因为这个问题已关闭,我已经得到了答案。感谢您的参与。 stackoverflow.com/questions/67513911/…
标签: python batch-file command-line-arguments windows-shell