Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
调用Python脚本时在.bat文件脚本中动态传递文件名_Python_Batch File_Command Line Arguments_Windows Shell - Fatal编程技术网

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

调用Python脚本时在.bat文件脚本中动态传递文件名,python,batch-file,command-line-arguments,windows-shell,Python,Batch File,Command Line Arguments,Windows Shell,我有一个通过.bat(批处理)文件调用的python脚本。为了让Python脚本工作,我在.bat文件中传递了硬编码参数。但是我需要动态地传递参数,因为每次参数的值(名称)都不同 python脚本的逻辑与我的问题无关,因为它工作正常。这里的问题是如何在.bat文件中动态传递这样的参数,以便在相同的.bat文件python脚本中指定的参数将被删除,但动态传递的参数除外 sys.argv[1]和sys.argv[1]是python文件中的参数(请参见下面的代码),它们是硬编码的,并在.bat文件中传

我有一个通过.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\uuu.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)
您可以搜索
“E:\Export\Test.*.csv”
并获取最新或最旧的文件

Path=pathlib.Path('E:\Export.glob('Test.*.csv'))
最新=最大值([path for path in path],key=os.path.getctime)


目录中不会有任何最旧或最新的。我只需要处理所有在给定目录@Klim中名称为“Test.*.csv”的文件Bim@enigma6205:好的,
min
max
不是必需的。但是,
路径
-表达式应该会有所帮助。感谢您更新您的问题。不过,这似乎是一个简单的复制品;如果希望Python扩展通配符,则必须在代码中这样做,就像在中一样,即使通配符字符串是从命令行而不是在脚本中填充的。在这个问题结束后我需要再次创建的重复问题中,我已经得到了答案。谢谢你的参与。
oldest = min([path for path in paths], key=os.path.getctime)