我有一个我一直在研究的CMD脚本,它读取一个包含3个不同文件的文件夹。它们的名称如下: File1_ddmmyyyy.txt File2_ddmmyyyy.txt file3_ddmmyyyy.txt
我可以使用*来识别文件,但下一步使用文件名(启动ETL程序)需要完整的文件路径。它无法识别文件(输入为:file3 _ * .txt字面意思)
有没有人有关于如何根据通配符获取此文件的想法,然后获取要在以后使用的全名?
谢谢
编辑 - 示例 -
有一个ETL文件可执行行,它根据文件名与每个文件匹配。例如:
File1_ddmmyyyy.txt与ETL文件File1.tf.map匹配(基于文件名和ETL文件名),它是一对一匹配(要加载3个文件,加载3个ETL文件)
DJENGINE -sc "Y:\FileLocation\%Year_Mo_Da%\File1*.txt"-tc Server="X";Database="Y";Table="dbo.File1" "Y:\MapLocation\File1.tf.xml" (FileName = File1_ddmmyyyy.txt)
DJENGINE -sc "Y:\FileLocation\%Year_Mo_Da%\File2*.txt"-tc Server="X";Database="Y";Table="dbo.File2" "Y:\MapLocation\File2.tf.xml" (FileName = File2_ddmmyyyy.txt)
DJENGINE -sc "Y:\FileLocation\%Year_Mo_Da%\File3*.txt"-tc Server="X";Database="Y";Table="dbo.File3" "Y:\MapLocation\File3.tf.xml" (FileName = File3_ddmmyyyy.txt)
在ETL程序的可执行代码行中,而不是引用实际文件名(需要运行),它试图运行File1 * .txt不填写变量。
我唯一的想法是因为我只有3个文件和3个基于根文件名的ETL文件我可以在此之前将每个文件全名放在变量中然后在可执行文件ETL中使用它们中的每一个线。
不确定这是否有用或如何操作。如果这有帮助,请告诉我。
答案 0 :(得分:0)
然后Taz带着他的mixmaster到达了Turbo ......
这样的凝结似乎是:
目录"Y:\FileLocation\yyyy_mm_dd
包含3个文本文件FileNddmmyyyy.txt
其中dd是日期编号,mm月份编号,yyyy 4位数年份编号,N将是1..3。
要求是使用模板
构建适当的命令DJENGINE -sc "Y:\FileLocation\yyyy_mm_dd\FileN_ddmmyyyy.txt" -tc Server="X";Database="Y";Table="dbo.FileN" "Y:\MapLocation\FileN.tf.xml"
其中dd,mm,yyyy,N具有相同的含义,对于N = 1..3
@ECHO OFF
SETLOCAL
SET "yyyymmdd=%1"
IF NOT DEFINED yyyymmdd for /f "skip=1 delims=" %%x in ('wmic os get localdatetime') do set yyyymmdd=%%x&GOTO gotdate
:gotdate
SET "yyyymmdd=%yyyymmdd:~0,8%"&SET "yyyy=%yyyymmdd:~0,4%"&SET "mm=%yyyymmdd:~4,2%"&SET "dd=%yyyymmdd:~6,2%"
FOR %%a IN (1,2,3) DO ECHO(DJENGINE -sc "Y:\FileLocation\%yyyy%_%mm%_%dd%\File%%a_%dd%%mm%%yyyy%.txt" -tc Server="X";Database="Y";Table="dbo.File%%a" "Y:\MapLocation\File%%a.tf.xml"
GOTO :EOF
如果没有关于yyyymmdd来自何处的任何信息,上述内容应填写 today 的值。
如果为程序提供了yyyymmdd格式的参数,请执行以下操作:
thisbatch 20140726
然后该程序将生成2014年7月26日 th 的行(请注意,此处提供的值未检查其有效性)
所需的DJENGINE命令仅用于ECHO
用于测试目的。 在您确认命令正确后,将ECHO(DJENGINE
更改为DJENGINE
以实际执行文件上的程序。这假设DJENGINE
是可执行文件,而不是批处理过程。