2013-08-02 69 views
0

我必須在目錄中找到最新的文件。我用下面的代碼對最近的文件工作正常,但我的問題是,有兩個文件生成相同的時間戳,例如查找批處理腳本中的最新文件

  1. s_dss_000GJ00I0000000000IW_9_error.csv
  2. s_dss_000GJ00I0000000000IW_8_1_2013_14_10_standard_error.csv

我的代碼是:

for /f "delims=" %%x in ('dir /od /a-d /b %1') do set recent=%%x 

在這裏,我路過%1%說法是s_dss_000GJ00I0000000000IW_9*.csv找到最新的文件。此代碼返回最近的文件爲s_dss_000GJ00I0000000000IW_8_1_2013_14_10_standard_error.csv,但我想要最近的文件爲s_dss_000GJ00I0000000000IW_9_error.csv

能否請你幫我在這?

+0

歡迎來到Stack Overflow。請儘快閱讀[關於]頁面。假設你通過了通配符表達式,那麼名稱中帶有_8_'的文件如何被選中?你怎麼知道'_9_'文件應該優先於'_8_'文件來選擇?如果有'_10_'替代'_9_'的文件會發生什麼?是基於名稱還是文件時間戳的標準? –

+0

如果兩個(或更多)文件具有相同的時間戳,則兩個(或更多)文件都是「最近的」。 – Endoro

+0

您的代碼有效。在命令行測試它:'for/f「delims =」%x in('dir/od/a-d/b s_dss_000GJ00I0000000000IW_9 * .csv')do @echo%x'。 – Endoro

回答

0

不確定你的問題中的一些事情。如果你想在文件名的那句名言,你可以過濾它的發現,像這樣:

for /f "delims=" %%x in ('dir /od /a-d /b ^| find /i "_9_error"') do set recent=%%x 

注^允許使用的管道。

如果該文件具有已知內容,則可以類似地使用find找出使用哪一個。如果文件名和內容都沒有要篩選的內容,並且時間戳是相同的,那麼您就被卡住了。

+0

文件名中沒有已知的短語。 _9_error對於下一個文件將不會相同_10_error。這個文件是用informatica雲自動生成的。我想要一個for循環,跳過包含標準名稱的文件並搜索最近的文件。 –

+0

下面的批處理文件適用於我的解決方案,只是問題是複製命令不復制具有不同名稱的文件。 –

0

我已經創建了下面的批處理腳本來解決我的問題。唯一的問題是複製命令。

我想用不同的名稱複製文件名。這是行不通的。 例如需要將s_dss_000GJ00I0000000000IW.csv複製爲AAA.csv。

@ECHO OFF 
setlocal EnableDelayedExpansion 
set j=0 
SET logdirectory=C:\batchfiles\error 
SET logdirectoryBackup=C:\batchfiles\error_processing\ 
cd "%logdirectory% 

FOR /f "delims=" %%i IN ('dir /b /a-d /o-d s_dss_000GJ00I0000000000IW*.csv') DO (
set /A j=j+1 
echo !j! 

set tst=%%i 
set tst=!tst:standard=! 
if not !tst!==%%i ( 
echo %%i contains standard 
) else (

echo f|xcopy %%i "%logdirectoryBackup%"AAA.csv /Y 
echo %%i not contains standard 

) 
if !j! geq 2 (

    goto :end 
) 

) 
:end 
pause 
相關問題