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