[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] [已解决]请教批处理比较每行,某两列数的大小

本帖最后由 gcbgczhang 于 2021-7-31 14:19 编辑

如果大,就输出这一行
文件名:bt_k.txt
内容:
王孔发        211203196        3.3        37074        13941048863        是        王孔财        弟        14.65        211281103201020021J
赵立山        211203196        19.74        93344        18241085523        是        赵立山        本人        12.54        211281103201010154J
王洪发        211203196        22.87        61408        14704105488        是        王洪发        本人        10.79        211281103201020038J
黄秀英        211226196        4        11160        13030783523        是        李向坤        弟媳        13.9        211281103201010212J
...
要求:对比3列和9列,如果3列比9列大,就输出这一行。

赵立山        211203196        19.74        93344        18241085523        是        赵立山        本人        12.54        211281103201010154J
王洪发        211203196        22.87        61408        14704105488        是        王洪发        本人        10.79        211281103201020038J
...
用以下命令不行
  1. @echo off
  2. for /f "tokens=1-12 delims= " %%a in (bt_k.txt) do (
  3. if  %%c  GTR  %%i echo %%b>>超领.txt
  4. )
  5. for /f "delims=*" %%i in (超领.txt) do  findstr  "%%i" bt_k.txt >>超领祥细.txt
复制代码
我自己写了这个,有时准,有时不准,特别是有小数点时。不知道为啥,请教老师帮我弄一个。

小数比较大小需要把小数点对齐
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. (
  4. for /f "tokens=1-12" %%a in (bt_k.txt) do (
  5. call :Cpr %%c %%i
  6. if errorlevel 1 (echo;%%a %%b %%c %%d %%e %%f %%g %%h %%i %%j %%k %%l)
  7. )
  8. )>超领祥细.txt
  9. endlocal
  10. pause
  11. exit
  12. :Cpr
  13. setlocal
  14. set n1=%1
  15. set n2=%2
  16. set x1=%n1:.=%
  17. set x2=%n2:.=%
  18. if %x1%==%n1% (set n1=%n1%.0)
  19. if %x2%==%n2% (set n2=%n2%.0)
  20. set sz=0000000000000000
  21. for %%z in (1 2) do (
  22. for /f "delims=. tokens=1,2" %%x in ("!n%%z!") do (set/a z%%z=%%x,x%%z=%%y)
  23. set str=!z%%z!fedcba9876543210&set/a len=0x!str:~15,1!
  24. for /f %%w in ("!len!") do (set z%%z=!sz:~0,-%%w!!z%%z!)
  25. set str=!x%%z!fedcba9876543210&set/a len=0x!str:~15,1!
  26. for /f %%w in ("!len!") do (set x%%z=!x%%z!!sz:~0,-%%w!)
  27. )
  28. if "!z1!.!x1!" gtr "!z2!.!x2!" (endlocal & exit /b 1)
  29. endlocal
  30. exit /b 0
复制代码

TOP

小数可以看成文件名进行分割比较
  1. @echo off & cd /d "%~dp0"
  2. (
  3. for /f "delims=" %%i in (bt_k.txt) do (
  4. for /f "tokens=3,9" %%a in ("%%i") do (
  5. if %%~na gtr %%~nb echo %%i
  6. if %%~na equ %%~nb (
  7. if not "%%~xa"=="" (
  8. if "%%~xb"=="" (
  9. echo %%i
  10. ) else (
  11. if %%~xa gtr %%~xb echo %%i
  12. )
  13. )
  14. )
  15. )
  16. )
  17. )>"超领.txt"
  18. pause&exit
复制代码

TOP

powershell
  1. $file = "a.txt"
  2. $fc = get-content $file
  3. $fc | foreach-object {
  4.     $a = (" " + $_) -split "\s+"
  5.     if ([single] $a[3] -gt [single] $a[9] )
  6.     {
  7.         write-host $_
  8.     }
  9. }
复制代码

TOP

  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims="  %%i in (bt_k.txt) do (
  3. for /f "tokens=3,9 delims= " %%a in ("%%i") do (
  4. for /f "tokens=1,2 delims=." %%c in ("%%a") do (set sz=%%c&set sx=%%d)
  5. for /f "tokens=1,2 delims=." %%c in ("%%b") do (set jz=%%c&set jx=%%d)
  6. if !sz! gtr !jz! (echo %%i>>超领.txt) else (if !sx! gtr !jx! echo %%i>>超领.txt)
  7. )
  8. )
  9. pause
复制代码

TOP

返回列表