2017-08-30 185 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:很酷,我已經做到了。我也指出了這種方法的潛在問題。 –