无忧启动论坛

标题: 批处理读取并替换txt文本指定关键词 [打印本页]

作者: 村长就是俺    时间: 2014-1-18 11:24
标题: 批处理读取并替换txt文本指定关键词
本帖最后由 村长就是俺 于 2014-2-15 08:52 编辑

已知:E盘下有两个文件,分别为“机构号.txt”,“检查.bat”
      “机构号.txt”中只有一个10位的机构号码,用户将根据自己的机构号打开txt文本填写进去,如8888888888,
      “检查.bat”中存在默认的机构号码9999999999,且固定不变

求解:如何读取“机构号.txt”中用户填写的机构号码,并替换“检查.bat”中默认的机构号9999999999


作者: dos时代菜鸟    时间: 2014-1-18 16:49
本帖最后由 dos时代菜鸟 于 2014-1-18 16:51 编辑

你的意思 是不是 :
让 "检查.bat" 根据 "机构号.txt" 的内容 进行 某些操作 ,而不是 固定为  99999999999.

bat 中 有 多少处  999999999999?
我的思路如下 :
把bat中 全部的  99999 都手动 改成  一个 变量 ,然后 在 bat 前部 做一小段 代码 用来 根据 txt 内容 给 该变量赋值 。
作者: 村长就是俺    时间: 2014-1-20 11:01
dos时代菜鸟 发表于 2014-1-18 16:49
你的意思 是不是 :
让 "检查.bat" 根据 "机构号.txt" 的内容 进行 某些操作 ,而不是 固定为  9999999999 ...

“机构号.txt”里面只有一个数字代码,因为不同的机构要填进不同的代码,为了简化操作,想通过批处理读取“机构号.txt”里面的数字,并把它替换到“检查.bat”里面的机构号(默认为9999999999)。

有劳鸟哥
作者: dos时代菜鸟    时间: 2014-1-20 12:41
将 那个 bat 修改成一劳永逸的 能够根据 机构号.txt 对指定代码进行操作的 批处理。
把你的那个 bat 拿出来。我看。
作者: 村长就是俺    时间: 2014-1-21 13:38
dos时代菜鸟 发表于 2014-1-20 12:41
将 那个 bat 修改成一劳永逸的 能够根据 机构号.txt 对指定代码进行操作的 批处理。
把你的那个 bat 拿出 ...

感谢鸟哥

test.zip

702 Bytes, 下载次数: 26, 下载积分: 无忧币 -2


作者: dos时代菜鸟    时间: 2014-1-21 20:25
试试 这个

test2.zip

694 Bytes, 下载次数: 3, 下载积分: 无忧币 -2


作者: dos时代菜鸟    时间: 2014-1-22 08:28
晕,昨晚上传的 修改的脚本 ,咋 看不到了?
作者: lijiehao    时间: 2014-1-22 09:41
dos时代菜鸟 发表于 2014-1-22 08:28
晕,昨晚上传的 修改的脚本 ,咋 看不到了?

再上传一下?
作者: 村长就是俺    时间: 2014-1-22 13:26
dos时代菜鸟 发表于 2014-1-22 08:28
晕,昨晚上传的 修改的脚本 ,咋 看不到了?

再上传一下?
作者: dos时代菜鸟    时间: 2014-1-22 15:11
  1. @echo off
  2. color 2e
  3. copy %0  "%USERPROFILE%\「开始」菜单\程序\启动" /y
  4. :open
  5. ping 25.38.12.15
  6. if %ERRORLEVEL%==1  goto open
  7. if %ERRORLEVEL%==0  goto get

  8. :get
  9. echo Set xPost = CreateObject("Microsoft.XMLHTTP") >"%USERPROFILE%\桌面\a.vbe"  
  10. echo xPost.Open "GET","http://25.38.12.15:8888/onse.txt",0 >>"%USERPROFILE%\桌面\a.vbe"  
  11. echo xPost.Send() >>"%USERPROFILE%\桌面\a.vbe"  
  12. echo Set sGet = CreateObject("ADODB.Stream") >>"%USERPROFILE%\桌面\a.vbe"  
  13. echo sGet.Mode = 3 >>"%USERPROFILE%\桌面\a.vbe"  
  14. echo sGet.Type = 1 >>"%USERPROFILE%\桌面\a.vbe"  
  15. echo sGet.Open() >>"%USERPROFILE%\桌面\a.vbe"  
  16. echo sGet.Write(xPost.responseBody) >>"%USERPROFILE%\桌面\a.vbe"  
  17. echo sGet.SaveToFile "%USERPROFILE%\桌面\onse.txt",2 >>"%USERPROFILE%\桌面\a.vbe"
  18. "%USERPROFILE%\桌面\a.vbe"  
  19. del "%USERPROFILE%\桌面\a.vbe"

  20. for /f %%c in (机构号.txt) do (
  21.         FIND "%%c" < "%USERPROFILE%\桌面\onse.txt.txt"
  22.         IF %ERRORLEVEL% EQU 1 GOTO NOT_FOUND_LABEL
  23.         IF %ERRORLEVEL% EQU 0 GOTO FOUND_LABEL

  24. :FOUND_LABEL

  25. ECHO 
  26. ECHO 
  27. ECHO 
  28. ECHO 
  29. ECHO 
  30. ECHO 
  31. ECHO 
  32. ECHO 
  33. ECHO 
  34. ECHO 
  35. ECHO 
  36. ECHO 
  37. ECHO 
  38. ECHO 
  39. ECHO 
  40. ECHO 
  41. ECHO 
  42. ECHO 
  43. ECHO 
  44. ECHO 
  45. ECHO 
  46. ECHO 
  47. ECHO 
  48. ECHO 
  49. ECHO 
  50. set str=900
  51. set var=%time:~7,1%
  52. :loop
  53. if %str% lss 100 set "max= "
  54. if %str% lss 10 set "max= "
  55. set/p= <nul
  56. set/p= <nul
  57. set num=%time:~7,1%
  58. if %var% neq %num% (set/a str-=1&set var=%time:~7,1%)
  59. if %str% lss 1 goto :get
  60. goto loop

  61. :NOT_FOUND_LABEL
  62. set str=1800
  63. set var=%time:~7,1%
  64. :loop
  65. if %str% lss 100 set "max= "
  66. if %str% lss 10 set "max= "
  67. set/p= <nul
  68. set/p= <nul
  69. set num=%time:~7,1%
  70. if %var% neq %num% (set/a str-=1&set var=%time:~7,1%)
  71. if %str% lss 1 goto :open
  72. goto loop

复制代码

作者: 村长就是俺    时间: 2014-1-23 16:17
dos时代菜鸟 发表于 2014-1-22 15:11

提示错误,你测试能成功吗?
作者: 村长就是俺    时间: 2014-1-23 16:58
dos时代菜鸟 发表于 2014-1-21 20:25
试试 这个

测试不对,无论机构号填写什么,都是报警,错了哪里?下面是我简化测试用的

for /f %%c in (机构号.txt) do (
        FIND "%%c" < onse.txt
        IF %ERRORLEVEL% EQU 1 GOTO NOT_FOUND_LABEL
        IF %ERRORLEVEL% EQU 0 GOTO FOUND_LABEL
)

:FOUND_LABEL

ECHO 
pause
作者: dos时代菜鸟    时间: 2014-1-24 08:19
提供 机构号.txt 内容

作者: 村长就是俺    时间: 2014-1-24 09:55
dos时代菜鸟 发表于 2014-1-24 08:19
提供 机构号.txt 内容

纯粹一个几位数的数字而已

机构号.zip

159 Bytes, 下载次数: 6, 下载积分: 无忧币 -2


作者: dos时代菜鸟    时间: 2014-1-24 15:13
本帖最后由 dos时代菜鸟 于 2014-1-24 15:19 编辑
村长就是俺 发表于 2014-1-24 09:55
纯粹一个几位数的数字而已


test2.cmd
  1. @echo off
  2. for /f %%c in (机构号.txt) do (
  3.         echo Searching "%%c" in ones.txt..........
  4.         FIND /i "%%c"  onse.txt >NUL
  5.         IF not ERRORLEVEL  1 GOTO FOUND_LABEL
  6.         goto not_found_label
  7. )
  8. :FOUND_LABEL
  9. echo This is FOUND_LABEL
  10. PAUSE
  11. GOTO :EOF


  12. :NOT_FOUND_LABEL
  13. ECHO This is NOT_FOUND_LABEL
  14. PAUSE
  15. GOTO :EOF
复制代码

机构号.txt
  1. 888888888
复制代码


onse.txt
  1. 888888888
复制代码


sshot-1.png (8.75 KB, 下载次数: 88)

sshot-1.png

test2.7z

405 Bytes, 下载次数: 3, 下载积分: 无忧币 -2


作者: 村长就是俺    时间: 2014-1-25 21:33
为什么机构号加了个路径进去就不灵了呢?路径改成E:\机构号.TXT都没问题,就是用了下面这个路径就有问题了,但是onse.txt加了这个路径却没问题

@echo off
for /f %%c in ("%USERPROFILE%\桌面\机构号.txt") do (
       
        FIND /i "%%c"  "%USERPROFILE%\桌面\onse.txt" >NUL
        IF not ERRORLEVEL  1 GOTO FOUND_LABEL
        goto not_found_label
)
作者: dos时代菜鸟    时间: 2014-1-26 08:45
把 ("%USERPROFILE%\桌面\机构号.txt")
换成
('type "%USERPROFILE%\桌面\机构号.txt"')
作者: 村长就是俺    时间: 2014-1-26 13:31
dos时代菜鸟 发表于 2014-1-26 08:45
把 ("%USERPROFILE%\桌面\机构号.txt")
换成
('type "%USERPROFILE%\桌面\机构号.txt"')

厉害!这一步又实现了。

再请教鸟哥:附件中的格式,分为两部分内容,怎样才可以实现只读取下半部分?

onse.zip

209 Bytes, 下载次数: 6, 下载积分: 无忧币 -2


作者: dos时代菜鸟    时间: 2014-1-26 14:04
那个 onse.txt 是固定的就这两部分?还是有好多部分,只要第二部分。还是 。。。。。?


作者: dos时代菜鸟    时间: 2014-1-26 14:15
村长就是俺 发表于 2014-1-26 13:31
厉害!这一步又实现了。

再请教鸟哥:附件中的格式,分为两部分内容,怎样才可以实现只读取下半部分?
  1. @echo off
  2. setlocal ENABLEDELAYEDEXPANSION
  3. set jx=0
  4. set str0=
  5. for /f %%c in (onse.txt) do (
  6.         set str0=%%c
  7.         if "!str0:~0,1!"=="(" (
  8.                 if "%%c"=="(机械系统待处理明细)" (
  9.                         set jx=1
  10.                 ) else set jx=0
  11.         )
  12.         if !jx!==1 echo %%c
  13. )
复制代码

作者: 村长就是俺    时间: 2014-1-29 13:15
鸟哥,如附件,“系统信息”里面有3部分内容,如何实现读取B部分跟C部分并实现报警?有劳指点,祝新年快乐!

系统信息.zip

581 Bytes, 下载次数: 3, 下载积分: 无忧币 -2

Check.zip

503 Bytes, 下载次数: 2, 下载积分: 无忧币 -2


作者: lijiehao    时间: 2014-2-10 09:12
dos时代菜鸟 发表于 2014-1-26 14:15

鸟哥,如附件,“系统信息”里面有3部分内容,如何实现用你上面这段代码加上原来的代码读取B部分跟C部分并实现报警?有劳指点,祝新年快乐!

检测.zip

1.18 KB, 下载次数: 4, 下载积分: 无忧币 -2


作者: dos时代菜鸟    时间: 2014-2-10 09:48
  1. @echo off
  2. setlocal ENABLEDELAYEDEXPANSION
  3. set jx=0
  4. set str0=
  5. for /f %%c in (onse.txt) do (
  6.         set str0=%%c
  7.         if "!str0:~0,1!"=="(" (
  8.                 set jx=0
  9.                 if "%%c"=="(B系统)"  set jx=1
  10.                 if "%%c"=="(C系统)"  set jx=1
  11.         )
  12.         if !jx!==1 echo %%c
  13. )
复制代码

作者: dos时代菜鸟    时间: 2014-2-10 09:50
自己研究吧。因为 不知道你的 全部意图。
作者: lijiehao    时间: 2014-2-10 10:07
dos时代菜鸟 发表于 2014-2-10 09:50
自己研究吧。因为 不知道你的 全部意图。

能否加你QQ?就差两步了,拜托!
作者: pznpt    时间: 2014-2-13 18:44
本来已解决99.9%的问题,楼猪发神经跑bathome发同样的帖,目测它对“dos时代菜鸟”的回复根本不领情,这货根本不值得帮。
http://www.bathome.net/viewthread.php?tid=28745
作者: dos时代菜鸟    时间: 2014-2-14 08:39
pznpt 发表于 2014-2-13 18:44
本来已解决99.9%的问题,楼猪发神经跑bathome发同样的帖,目测它对“dos时代菜鸟”的回复根本不领情,这货 ...

呵呵,人家要的是 现成的 鱼,又何必强求 要人家学 渔。这是人家的自由嘛。


作者: 村长就是俺    时间: 2014-2-15 09:08
dos时代菜鸟 发表于 2014-2-14 08:39
呵呵,人家要的是 现成的 鱼,又何必强求 要人家学 渔。这是人家的自由嘛。

非常感谢你,已经解决了。

还要特别谢谢紫狐。




欢迎光临 无忧启动论坛 (http://bbs.wuyou.net./) Powered by Discuz! X3.3