[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
a.txt
  1. 19:37:30 August 16 2023>   企业 名称:优 美 利 A
  2. 19:37:32 August 16 2023>   企业 名称:利海 B
  3. 19:37:34 August 16 2023>   企业 名称:利海 01:C (A)
  4. 19:37:36 August 16 2023>   企业 名称:利海 B
  5. 19:37:39 August 16 2023>   退出
  6. 20:37:30 August 16 2023>   企业 名称:利海 B
  7. 20:39:30 August 16 2023>   企业 名称:利海 B
  8. 20:38:31 August 16 2023>   退出
复制代码


执行
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. (for /f "useback tokens=1* delims=:" %%f in (`findstr /n .* "a.txt"`) do (
  4. for /f "tokens=1* delims=>" %%a in ("%%g") do (
  5. if defined name (
  6. if "!name!" neq "%%b" (
  7. if "%%b" neq "   退出 " (
  8. echo !t!^>   退出
  9. set name=%%b
  10. ) else set name=
  11. )
  12. ) else set name=%%b
  13. set t=%%a
  14. )
  15. echo=%%g
  16. ))>b.txt
  17. endlocal
  18. pause
复制代码


b.txt
  1. 19:37:30 August 16 2023>   企业 名称:优 美 利 A
  2. 19:37:30 August 16 2023>   退出
  3. 19:37:32 August 16 2023>   企业 名称:利海 B
  4. 19:37:32 August 16 2023>   退出
  5. 19:37:34 August 16 2023>   企业 名称:利海 01:C (A)
  6. 19:37:34 August 16 2023>   退出
  7. 19:37:36 August 16 2023>   企业 名称:利海 B
  8. 19:37:39 August 16 2023>   退出
  9. 20:37:30 August 16 2023>   企业 名称:利海 B
  10. 20:39:30 August 16 2023>   企业 名称:利海 B
  11. 20:38:31 August 16 2023>   退出
复制代码
bat小白,请多指教!谢谢!

TOP

回复 3# 娜美


   提供的样本需要保持原样,我用2楼中a.txt测试没问题。请提供一个测试出现问题的样本,看看问题出现在哪里。
bat小白,请多指教!谢谢!

TOP

本帖最后由 77七 于 2023-8-20 00:08 编辑

回复 5# 娜美


  1. @echo off
  2. setlocal enabledelayedexpansion
  3. (for /f "useback tokens=1* delims=:" %%f in (`findstr /n .* "a.txt"`) do (
  4. set str=%%g
  5. set str1=!str:企业=!
  6. if "!str1:退出=!" neq "!str!" (
  7. for /f "tokens=1* delims=>" %%a in ("%%g") do (
  8. if defined name (
  9. if "!name!" neq "%%b" (
  10. if "%%b" neq "   退出 " (
  11. echo !t!^>   退出
  12. set name=%%b
  13. ) else set name=
  14. )
  15. ) else set name=%%b
  16. set t=%%a
  17. )
  18. )
  19. echo=%%g
  20. ))>b.txt
  21. endlocal
  22. pause
复制代码
bat小白,请多指教!谢谢!

TOP

回复 7# 娜美


  1. @echo off
  2. setlocal enabledelayedexpansion
  3. (for /f "useback tokens=1* delims=:" %%f in (`findstr /n .* "a.txt"`) do (
  4. set str=%%g
  5. set str1=!str:企业=!
  6. if "!str1:退出=!" neq "!str!" (
  7. for /f "tokens=1* delims=>" %%a in ("%%g") do (
  8. if defined name (
  9. if "!name!" neq "%%b" (
  10. if "%%b" neq "   退出 " (
  11. echo !t!^>   退出
  12. set name=%%b
  13. ) else set name=
  14. )
  15. ) else set name=%%b
  16. )
  17. )
  18. for /f "tokens=1* delims=>" %%a in ("%%g") do (
  19. set t=%%a
  20. )
  21. echo=%%g
  22. ))>b.txt
  23. endlocal
  24. pause
复制代码
修改时忘记考虑了。
bat小白,请多指教!谢谢!

TOP

本帖最后由 77七 于 2023-8-21 13:01 编辑

回复 12# 娜美


  
echo a                        0.41毫秒
echo a>>b.txt,       0.30毫秒
echo. a>>b.txt      1,30毫秒  (不知为什么这一点会多用那么多时间)
findstr “aa” a.txt    44.90毫秒
type a.txt |findstr “aa”   99.12毫秒
for /f %%a in (‘set #’) do (rem),  42.70毫秒
探讨批处理代码效率

说法有误 :文本太大,以500万行算,只echo %%a就需要半小时,echo=%%a,需要更久。而且一个for /f 可能需要2毫秒,乘以500万,又是几个小时。
考虑其它脚本吧。
bat小白,请多指教!谢谢!

TOP

本帖最后由 77七 于 2023-8-21 12:54 编辑

回复 24# qixiaobin0715


   谢谢大佬指点!
我自己也试了一下,生成 500万行的 ”19:37:30 August 16 2023>   20854企业 名称:优 美 利 A“,用for /f echo %%a用时5分钟左右。
2009-2023,14年过去了,随着计算机性能提升,效率变高了。可能是5倍。
bat小白,请多指教!谢谢!

TOP

回复 26# Batcher


   
谢谢站长指点!
用链接中的文本和1.bat测试,
  1. 20:12:26.72
  2. 20:12:32.40
  3. 请按任意键继续. . .
复制代码


耗时6秒左右。
bat小白,请多指教!谢谢!

TOP

返回列表