【问题标题】:how to search for the particular string in file name in batch file programming?如何在批处理文件编程中搜索文件名中的特定字符串?
【发布时间】:2012-07-26 09:05:16
【问题描述】:

我必须搜索包含 *.txt 文件的特定文件夹,但文件名包含一些日期,例如 2012071220120713 等等。

我想搜索具有特定日期或更长日期的文件并将它们移动到另一个文件夹。如何使用批处理搜索包含某个日期或更长时间的文件名?

【问题讨论】:

  • 您可以使用FOR...(*)FOR /R 搜索文件名,然后测试它是否包含您范围内的日期
  • 旁注:请在以后的问题中使用标点符号。
  • 我们需要更多地了解文件名的格式。如果文件名遵循特定的模板,那么它可能不会太难。但是,如果日期可以随机嵌入文件名中的任何位置,那么这可能非常困难,甚至是不可能的。
  • @dbenham 可以使用 Sed 提取日期并传递给解析。不应该那么困难...
  • @Eitan - sed 的第 3 方 Windows 兼容版本无疑使任务变得更加简单,尽管我通常尝试坚持使用本机批处理功能。但我要说的是,文件名中可能有多个 7 字符数字字符串。如果没有一个好的名称模板规范,就无法知道要提取哪些字符。

标签: windows batch-file


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 2023-03-14
    • 1970-01-01
    • 2015-08-15
    相关资源
    最近更新 更多