Board logo

标题: [文本处理] [已解决]拖放处理文件的批处理代码求排错 [打印本页]

作者: ksla    时间: 2016-1-8 23:03     标题: [已解决]拖放处理文件的批处理代码求排错

解决方法在十八楼...


M1不能正常输出..请问如何解决呢,,各位大大
M2可正常使用!
我认,,我是左抄抄,右抄抄的!!
  1. @echo off
  2. setlocal EnableDelayedExpansion
  3. title XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
  4. mode con: cols=80 lines=40
  5. :ch
  6. set/p aa=输入序号后回车确定:
  7.   echo.%aa%|findstr "^[1-8]$">nul&&goto M%aa%
  8. goto ch
  9. :M1
  10. cls
  11. if "%aa%"=="q" goto quit
  12. set /p a=请输入需要批处理的文本后按回车键(q=退出):
  13. if "%a%"=="q" goto zcd
  14. cls
  15. gawk "BEGIN{FS=OFS=\".\"}/^[0-9]/{if(!a[$1\"_\"$2\"_\"$3]++)print $1,$2,$3,\"0/24\";next}{print}" %a% > 2.txt
  16. pause
  17. goto ch
  18. :M2
  19. cls
  20. echo 输入Q返回主菜单
  21. set a=
  22. set/p a=请将文件拖入:
  23. if /i "%a%"=="q" goto zcd
  24. cls
  25. echo 正在计算文本行数,请稍等......
  26. for /f "delims=" %%i in (%a%) do set/a b+=1
  27. cls
  28. set c=
  29. set/p c=请输入要得到的文件个数:
  30. set/a d=%b%/%c%+3
  31. cls
  32. echo 正在分割,请稍等......
  33. set e=1
  34. set f=0
  35. for %%k in (%a%) do set wjm=%%~nk
  36. for /f "delims=" %%j in (%a%) do (
  37. echo %%j>>A.txt
  38. set/a f+=1
  39. if !f! GEQ %d% set/a e+=1 & set f=0
  40. )
  41. cls
  42. move A.txt D:\TOOL\H\QQp1
  43. move A.txt D:\TOOL\H\QQp2
  44. move A.txt D:\TOOL\H\QQp3
  45. move A.txt D:\TOOL\H\QQp4
  46. move A.txt D:\TOOL\H\QQp5
  47. move A.txt D:\TOOL\H\QQp6
  48. echo 分割与移动成功...
  49. pause
  50. goto ch
复制代码

作者: ksla    时间: 2016-1-9 09:02

顶顶...........
作者: ksla    时间: 2016-1-9 12:00

顶顶...........
作者: gawk    时间: 2016-1-9 15:47

请介绍一下M1想实现什么功能?
希望得到的效果是什么?
实际得到的效果是什么?
作者: ksla    时间: 2016-1-9 16:01

回复 4# gawk


拖入文本的方式的方式,然后实现下面工能:

未完成前:
#---------中国CN
1.1.1.1
2.2.2.2
3.3.3.3
#---------美国EN
4.4.4.4
5.5.5.5
6.6.6.6

完成后:
#---------中国CN
1.1.1.0-20
2.2.2.0-20
3.3.3.0-20
#---------美国EN
4.4.4.0-20
5.5.5.0-20
6.6.6.0-20
作者: gawk    时间: 2016-1-9 16:11

回复 5# ksla


    %e%这个变量是在哪里定义的?
作者: ksla    时间: 2016-1-9 16:13

回复 6# gawk


    这个值不是表示(被拖进去的文件)吗?
作者: gawk    时间: 2016-1-9 16:49

回复 7# ksla


set/p a=请将文件拖入:
很显然不是
作者: ksla    时间: 2016-1-9 16:51

我本身也是这个值的%a%,忘记把set/p a=改成set/p e=

但改了一样不行!!
作者: ksla    时间: 2016-1-9 16:54

回复 8# gawk

提示这些错误信息!!


gawk: cmd. line:1: BEGIN{FS=OFS="."}/[0-9]/{if(\\IP\4.\lo13957120\lo157696\2.txt                                                        
gawk: cmd. line:1:                             ^ backslash not last character on line
gawk: cmd. line:1: BEGIN{FS=OFS="."}/[0-9]/{if(\\IP\4.\lo13957120\lo157696\2t.txt
gawk: cmd. line:1:                             ^ syntax error
作者: ksla    时间: 2016-1-9 16:58

本帖最后由 ksla 于 2016-1-9 17:01 编辑

回复 8# gawk


    如果可以做到下面那样...那就方便了!!
(1)文本分割
(2)转换IP格式


按下2键
拖放文本...

未完成前:
#---------中国CN
1.1.1.1
2.2.2.2
3.3.3.3
#---------美国EN
4.4.4.4
5.5.5.5
6.6.6.6

按A键
完成后:
#---------中国CN
1.1.1.0-20
2.2.2.0-20
3.3.3.0-20
#---------美国EN
4.4.4.0-20
5.5.5.0-20
6.6.6.0-20

按B键
完成后:
1.1.1.0-20
2.2.2.0-20
3.3.3.0-20
4.4.4.0-20
5.5.5.0-20
6.6.6.0-20
作者: gawk    时间: 2016-1-9 18:16

回复 10# ksla


    我的 Win 7 + gawk 4.1.0 测试没有遇到这个报错
作者: gawk    时间: 2016-1-9 18:18

回复 9# ksla


    改了一样不行,说明代码里面可能有不止一个错误,我指出的是第一个错误。解决一个就离正确更进一步,不着急慢慢来。
作者: 回家路上    时间: 2016-1-9 18:28

回复 11# ksla


感觉你问问题就像在刷帖一样,建议想好、组织好语言再问。
作者: ksla    时间: 2016-1-9 18:31

回复 14# 回家路上


    你说得对,组织能力有问题,我日后会多多改善!毕竟我未接触过批处理...
作者: ksla    时间: 2016-1-9 18:34

回复 13# gawk


    好的...我继续折腾
作者: codegay    时间: 2016-1-9 18:57

搜索提问的智慧
作者: WHY    时间: 2016-1-9 21:03

回复 1# ksla


        开启变量延迟以后,表示否定条件的感叹号需要转移,具体在第18行

另外,如果拖拽到CMD窗口的文件路径包含空格,CMD会自动加上双引号,这时候会报错,具体在16行;如果文件名或路径包含&()等,CMD又不会自动加上双引号,放到FOR循环中照样报错。
我的建议是,不要拖拽,直接输好了。
作者: ksla    时间: 2016-1-10 10:17

回复 18# WHY


    听你说,我改用的输入的方法,,确实可以了,,谢谢你
作者: WHY    时间: 2016-1-10 22:28

回复 19# ksla


    昨晚喝了点小酒,敲错了N多字,抱歉

1.第18行应该是第17行,16行应该是15行;
2.否定条件应该是逻辑非,转移应该是转义。也就是把17行的 ! 改成 ^!,因为开启变量延迟扩展后,!变成了变量引用符,不转义的话会在预处理时被去掉。




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