[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
本帖最后由 77七 于 2023-3-19 19:42 编辑
  1. @echo off
  2. rem 文件夹不要存在 1.txt 2.txt
  3. setlocal enabledelayedexpansion
  4. for /f "tokens=1-4 delims=        " %%a in (a.txt) do (
  5.         if defined str (
  6.                 >>1.txt echo !str!#%%a#%%b@%%c##%%d
  7.                 set "str=%%a#%%b@@%%c##%%d"
  8.         ) else (
  9.                 set "str=%%a#%%b@@%%c##%%d"
  10.         )
  11. )
  12. set str=
  13. for /f "delims=" %%a in (b.txt) do (
  14.         if defined str (
  15.                 >>2.txt echo !str! %%a
  16.                 set str=
  17.         ) else (
  18.                 set "str=%%a"
  19.         )
  20. )
  21. endlocal
  22. setlocal enabledelayedexpansion
  23. for /f "tokens=1-2" %%a in (2.txt) do (
  24.         for /f "tokens=2,6 delims=中#" %%c in ('type "1.txt" ^| findstr "@@%%a" ^| findstr "@%%b"') do (
  25.                 set "t1=%%c"
  26.                 set "t2=%%d"
  27.                 set "t1=!t1:Mar=3!"
  28.                 set "t2=!t2:Mar=3!"
  29.                 rem 如果需要可以把12个月份的英文都替换为数字
  30.                 for /f "tokens=1-4 delims=,. " %%i in ("!t1!") do (
  31.                         set "t1date=%%k-%%i-%%j %%l"
  32.                 )
  33.                 for /f "tokens=1-4 delims=,. " %%i in ("!t2!") do (
  34.                         set "t2date=%%k-%%i-%%j %%l"
  35.                 )
  36.                 if "!t1date!" equ "!t2date!" (
  37.                         echo 计算列%%a%%b 时差间隔: OK
  38.                 ) else if "!t1date!" gtr "!t2date!" (
  39.                         call :t "!t2date!" "!t1date!"
  40.                         echo 计算列%%a%%b 时差间隔: !secs!秒
  41.                 ) else (
  42.                         call :t "!t1date!" "!t2date!"
  43.                         echo 计算列%%a%%b 时差间隔: !secs!秒
  44.                 )
  45.         )
  46. )>>c2.txt
  47. endlocal
  48. pause
  49. exit
  50. :t
  51. ::日期时间差 code by foxjl
  52. rem set /p date1=输入开始日期(如1984-2-22 5:11:3):
  53. rem set /p date2=输入结束日期(如2013-9-18 5:6:31):
  54. set date1=%~1
  55. set date2=%~2
  56. for /f "tokens=1,2,3,4,5,6,7 delims=-/:. " %%i in ("%date1%") do ((set Y1=%%i) && (set M1=%%j) && (set D1=%%k) && (set H1=%%l) && (set F1=%%m) && (set S1=%%n) && (set MS1=%%o))
  57. for /f "tokens=1,2,3,4,5,6,7 delims=-/:. " %%i in ("%date2%") do ((set Y2=%%i) && (set M2=%%j) && (set D2=%%k) && (set H2=%%l) && (set F2=%%m) && (set S2=%%n) && (set MS2=%%o))
  58. set /a secs=((d2-32075+1461*(y2+4800+(m2-14)/12)/4+367*(m2-2-(m2-14)/12*12)/12-3*((y2+4900+(m2-14)/12)/100)/4)*86400+H2*3600+F2*60+S2)-((d1-32075+1461*(y1+4800+(m1-14)/12)/4+367*(m1-2-(m1-14)/12*12)/12-3*((y1+4900+(m1-14)/12)/100)/4)*86400+H1*3600+F1*60+S1)
  59. rem set /a D=secs/86400,H=(secs%%86400)/3600,M=(secs%%3600)/60,S=secs%%60
  60. rem echo.&echo.%date1%与%date2%之间相隔:%D%天%H%时%M%分%S%秒
  61. rem echo %secs%
  62. exit /b
复制代码

试试这样行吗?字符串比较不太熟悉,很多地方不知道写的对不对
1

评分人数

bat小白,请多指教!谢谢!

TOP

如果a.txt里的**表示的内容不确定,可以预先处理一遍,删除掉
bat小白,请多指教!谢谢!

TOP

回复 4# 娜美

2楼代码实测把a.txt保存为ansi可以得到正确结果可能我用了 汉字作为分隔符,出现了问题,现修改如下,应该支持utf-8了
   将第24行改为
  1.         for /f "tokens=2,6 delims=.#" %%c in ('type "1.txt" ^| findstr "@@%%a" ^| findstr "@%%b"') do (
复制代码
bat小白,请多指教!谢谢!

TOP

回复 4# 娜美


   我重新贴一遍吧,把*那列忽略掉,如果含有@#.都会有影响,我是把两行合并成一行了
  1. @echo off
  2. rem 文件夹不要存在 1.txt 2.txt
  3. setlocal enabledelayedexpansion
  4. for /f "tokens=1-4 delims= " %%a in (a.txt) do (
  5.         if defined str (
  6.                 >>1.txt echo !str!#%%a#%%b@%%c##1
  7.                 set "str=%%a#%%b@@%%c##1"
  8.         ) else (
  9.                 set "str=%%a#%%b@@%%c##1"
  10.         )
  11. )
  12. set str=
  13. for /f "delims=" %%a in (b.txt) do (
  14.         if defined str (
  15.                 >>2.txt echo !str! %%a
  16.                 set str=
  17.         ) else (
  18.                 set "str=%%a"
  19.         )
  20. )
  21. endlocal
  22. setlocal enabledelayedexpansion
  23. for /f "tokens=1-2" %%a in (2.txt) do (
  24.         for /f "tokens=2,6 delims=.#" %%c in ('type "1.txt" ^| findstr "@@%%a" ^| findstr "@%%b"') do (
  25.                 set "t1=%%c"
  26.                 set "t2=%%d"
  27.                 set "t1=!t1:Mar=3!"
  28.                 set "t2=!t2:Mar=3!"
  29.                 rem 如果需要可以把12个月份的英文都替换为数字
  30.                 for /f "tokens=1-4 delims=,. " %%i in ("!t1!") do (
  31.                         set "t1date=%%k-%%i-%%j %%l"
  32.                 )
  33.                 for /f "tokens=1-4 delims=,. " %%i in ("!t2!") do (
  34.                         set "t2date=%%k-%%i-%%j %%l"
  35.                 )
  36.                 if "!t1date!" equ "!t2date!" (
  37.                         echo 计算列%%a%%b 时差间隔: OK
  38.                 ) else if "!t1date!" gtr "!t2date!" (
  39.                         call :t "!t2date!" "!t1date!"
  40.                         echo 计算列%%a%%b 时差间隔: !secs!秒
  41.                 ) else (
  42.                         call :t "!t1date!" "!t2date!"
  43.                         echo 计算列%%a%%b 时差间隔: !secs!秒
  44.                 )
  45.         )
  46. )>>c2.txt
  47. endlocal
  48. pause
  49. exit
  50. :t
  51. ::日期时间差 code by foxjl
  52. rem set /p date1=输入开始日期(如1984-2-22 5:11:3):
  53. rem set /p date2=输入结束日期(如2013-9-18 5:6:31):
  54. set date1=%~1
  55. set date2=%~2
  56. for /f "tokens=1,2,3,4,5,6,7 delims=-/:. " %%i in ("%date1%") do ((set Y1=%%i) && (set M1=%%j) && (set D1=%%k) && (set H1=%%l) && (set F1=%%m) && (set S1=%%n) && (set MS1=%%o))
  57. for /f "tokens=1,2,3,4,5,6,7 delims=-/:. " %%i in ("%date2%") do ((set Y2=%%i) && (set M2=%%j) && (set D2=%%k) && (set H2=%%l) && (set F2=%%m) && (set S2=%%n) && (set MS2=%%o))
  58. set /a secs=((d2-32075+1461*(y2+4800+(m2-14)/12)/4+367*(m2-2-(m2-14)/12*12)/12-3*((y2+4900+(m2-14)/12)/100)/4)*86400+H2*3600+F2*60+S2)-((d1-32075+1461*(y1+4800+(m1-14)/12)/4+367*(m1-2-(m1-14)/12*12)/12-3*((y1+4900+(m1-14)/12)/100)/4)*86400+H1*3600+F1*60+S1)
  59. rem set /a D=secs/86400,H=(secs%%86400)/3600,M=(secs%%3600)/60,S=secs%%60
  60. rem echo.&echo.%date1%与%date2%之间相隔:%D%天%H%时%M%分%S%秒
  61. rem echo %secs%
  62. exit /b
复制代码
bat小白,请多指教!谢谢!

TOP

返回列表