2017-08-30 261 views
1

我有一个批处理文件,需要每天对特定文件执行操作。到目前为止,文件名都遵循这意味着我可以使用以下方法来获得当天的确切的文件名的模式EX_2017-08-30.DAT使用批处理文件将文件名变为变量

set today=%date:~-4,4%-%date:~-10,2%-%date:~-7,2% 
set filename=EZ_%today%.DAT 

现在我被告知文件名会改变,包括时间戳,例如作为EX_2017-08-30-231859.DAT。但是,事先并不知道确切的时间(当某个过程完成时它会被设置)。

我不能在整个批处理文件中使用通配符,因为文件名正被写入外部文件以供其他应用程序使用,所以我必须知道确切的文件名。无论如何,我可以使用通配符进行搜索并将生成的完整文件名存储到变量中?

回答

1

如果你可以列出你的EX_ *文件在目录中的文件,你可以这样做:

for %%i in (EX_%today%-*.DAT) do (
    set filename=%%i 
) 

第一行列出的目录中匹配的日期和扩展名的文件,然后将其将最后一个文件设置为filename变量。要小心,因为如果有多个匹配表达式的文件,这不会引发任何警告。

如果你不能列出目录,你唯一的机会就是暴力。文件名只有24 * 60 * 60个可能性,如果您及时倒退,您应该在几千次迭代中到达所需的文件,假定任务通常在接近午夜时完成。

+0

我相信我可以访问列出文件,所以这似乎是它会做的伎俩。在我接受这个答案之前,我建议你将'echo %% i'更改为'set filename = %% i',这样它就可以更直接地回答我的问题(将文件名设置为变量,而不仅仅是列出文件名)。 – techturtle

+0

@techturtle:很酷,我已经做到了。我也指出了这种方法的潜在问题。 –

相关问题