CMD使用通配符来获取特定文件

时间:2014-09-09 21:26:23

标签: cmd

我有一个我一直在研究的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中使用它们中的每一个线。

不确定这是否有用或如何操作。如果这有帮助,请告诉我。

1 个答案:

答案 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是可执行文件,而不是批处理过程。