2012-07-26 31 views
0

我必須搜索具有*.txt文件的特定文件夾,但該文件的名稱中包含一些日期,如20120712,20120713等。如何在批處理文件編程中搜索文件名中的特定字符串?

我想搜索具有特定日期或更長時間的文件並將它們移動到另一個文件夾。如何使用批次搜索包含特定日期或更大文件名的文件名?

+1

您可以用搜索文件名'FOR ...(*)'或'FOR/R'和測試,然後如果它包含在你的範圍 – jeb 2012-07-26 10:41:39

+0

側面說明日期:請在將來的問題中使用標點符號。 – 2012-07-26 15:11:34

+0

我們需要更多地瞭解文件名是如何格式化的。如果文件名遵循特定的模板,那麼它可能不會太難。但是,如果日期可以隨機嵌入文件名中的任何位置,那麼它可能非常困難,也許是不可能的。 – dbenham 2012-07-26 16:06:34

回答

1

試着這麼做:

@echo off 

setlocal 

set SEARCH_DIR=c:\temp\source 
set TARGET_DIR=c:\temp\target 
set DATE_THRESHOLD=20120720 

REM *** 
REM *** NEED TO MODIFY REGEX ACCORDINGLY (THIS REGEX EXPECTS THE FILES TO BE CALLED YYYYMMDD.TXT). 
REM *** 
for /f %%F in ('dir /b %SEARCH_DIR%\*.txt 2^>nul ^| %SystemRoot%\System32\findstr.exe /r /c:"^[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]\.txt"') do (
    call :PROCESS_FILE "%%F" 
    ) 

endlocal 

goto END 


:PROCESS_FILE 

set PF_FILENAME=%1 
set PF_FILENAME=%PF_FILENAME:"=% 

REM *** 
REM *** EXTRACT THE NUMERIC PART FROM THE FILENAME. THIS WILL NEED MODIFYING IF YOUR FILENAME FORMAT IS NOT YYYYMMDD.TXT. 
REM *** 
set /a PF_YYYYMMDD=%PF_FILENAME:~0,8% 

echo Processing file [%PF_FILENAME%]... 

REM *** 
REM *** CHECK DATE. 
REM *** 
if %PF_YYYYMMDD% LEQ %DATE_THRESHOLD% (
    echo File not old enough - skipping. 
    goto END 
    ) 

REM *** 
REM *** MOVE FILE. 
REM *** 
echo Moving file.... 
move "%SEARCH_DIR%\%PF_FILENAME%" "%TARGET_DIR%" 
if exist "%SEARCH_DIR%\%PF_FILENAME%" (
    echo ERROR : Failed to move file. 
) else (
    echo File moved successfully. 
) 

goto END 


:END 
相關問題