Board logo

标题: [文本处理] [已解决]求助批处理如何提取文本内指定的 日期时段 [打印本页]

作者: KLL    时间: 2024-10-3 19:41     标题: [已解决]求助批处理如何提取文本内指定的 日期时段

a.txt  文本内容
2024/10/01 17:01,19972.00,19986.00,19968.25,19978.00,764,
2024/10/01 17:02,19978.75,19981.75,19968.25,19968.25,401,
2024/10/01 17:03,19969.25,19969.75,19945.25,19952.50,861,
2024/10/01 17:04,19953.50,19955.00,19949.25,19950.25,287,
.
.

2024/10/02 15:55,20066.00,20068.75,20066.00,20067.00,87,
2024/10/02 15:56,20067.00,20069.00,20066.50,20067.50,178,
2024/10/02 15:57,20067.50,20068.75,20065.25,20067.75,153,
2024/10/02 15:58,20067.25,20068.00,20066.00,20066.00,80,
2024/10/02 15:59,20065.75,20065.75,20060.25,20060.75,251,
2024/10/02 16:00,20060.50,20060.50,20056.25,20059.25,348,
文本中 第一列为 日期 时间,
每一分钟一行
起始时间为17:01
终止时间为次日 16:00

提取至b.txt
谢谢
作者: 77七    时间: 2024-10-3 21:02

提取什么?没说清楚
作者: KLL    时间: 2024-10-3 21:22

回复 2# 77七
提取指定日期   起始时间为17:01 至次日 16:00  的行
作者: czjt1234    时间: 2024-10-3 21:34

17:01 至次日 16:00  的行

这不就是全部的文件内容么?
作者: 77七    时间: 2024-10-3 21:52

  1. @echo off
  2. set d1=2024/10/01
  3. cd /d "%~dp0"
  4. for /f %%a in ('powershell -c "Get-Date (Get-Date '%d1%').AddDays(1) -uformat "%%Y/%%m/%%d""') do (
  5. set d2=%%a
  6. )
  7. (for /f "tokens=1* delims=," %%a in ('findstr /b "%d1% %d2%" "a.txt"') do (
  8. if "%%a" geq "%d1% 17:01" (
  9. if "%%a" leq "%d2% 16:00" (
  10. echo %%a,%%b
  11. )
  12. )
  13. )) > "b.txt"
  14. pause
复制代码

作者: KLL    时间: 2024-10-3 22:58

已运行测试    正确

感谢协助   谢谢您
作者: aloha20200628    时间: 2024-10-4 00:42

回复 1# KLL
  1. @echo off &setlocal &set "g=1"
  2. (for /f "tokens=1-2 delims=, " %%a in ('sort a.txt') do if defined g (
  3. if "%%b"=="17:01" (set "gg=1") else if "%%b"=="16:00" set "g="
  4. if defined gg echo,%%a %%b
  5. ))>b.txt
  6. endlocal&pause&exit/b
复制代码

作者: qixiaobin0715    时间: 2024-10-8 15:08

根据楼主的描述,要提取的数据总共23个小时,每分钟一行数据,也即是1380行,根据这个思路,代码也可这样写:
  1. @echo off
  2. set "StartingTime=2024/10/01 17:01"
  3. setlocal enabledelayedexpansion
  4. (for /f "tokens=1* delims=," %%i in (a.txt) do (
  5.     if "%%i"=="%StartingTime%" (
  6.         set n=0
  7.         echo,%%i,%%j
  8.     ) else if defined n (
  9.         set /a n+=1
  10.         if !n! equ 1380 set n=
  11.         echo,%%i,%%j
  12.     )
  13. ))>b.txt
  14. pause
复制代码





欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2