调用Python脚本时在.bat文件脚本中动态传递文件名

2024-10-03 04:40:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个通过.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\u Upload\u 10-15-2020.csv”是sys.argv[1] “Test_Upload_10-15-2020.csv”是sys.argv[2]

因此,我需要将其自动化,以允许处理以“Test\u Upload\u”开头的每个csv文件

我试图用.bat中的“”符号替换日期戳(参见下面的代码) python“E:\Export\TEST.py”E:\Config\TEST\u Upload\ueem>.csv./TEST\u Upload\u*.csv“E:\logFolderPath”

但是我在执行这个.bat文件时出错了

出现错误:[Error 123]文件名、目录名或卷标语法不正确:“E:\Export\Test\u Upload\u*.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)

Tags: 文件csvtest脚本名称config编码参数