无忧启动论坛

标题: 求个批处理:输入字符串替换文件中指定标志内容 [打印本页]

作者: 9001    时间: 2020-11-15 01:03
标题: 求个批处理:输入字符串替换文件中指定标志内容
本帖最后由 9001 于 2020-11-15 15:12 编辑

使用场景:
有个文件a.ora包含座位信息,标志是PC-88之类,88之类座位号为01-99。需要运行批处理,输入座号如99,然后打开a.ora将88替换为99。
“PC-”是标志,要更换的是其后面两位数字。
比如a.ora内容:

XXXXXX  XXXX
XXPC-88,XXX
XXXXXPC-88XXX
XX为任意字符,PC-是唯一标志,不会有歧义。
如果输入01,那么改动保存的a.ora内容应该是

XXXXXX  XXXX
XXPC-01,XXX
XXXXXPC-01XXX


上面是原先的要求,实现时由于88内容可能变化,需要VBS替换。退而求其次简化要求,从固定机器下载listener. ora后再更改注入座席号,实现得很丑陋:
  1. rem 输入座席号,将座席号码注入当前目录下的ora文件,并放到oracle对应的配置文件中。
  2. @echo off
  3. color 3f
  4. PUSHD %~dp0
  5. title 座席席位设置
  6. set listener=listener
  7. set oraclePath=C:\oracle\product\10.2.0\db_2\network\ADMIN
  8. if not exist C:\oracle\product\10.2.0\db_2\network\ADMIN\%listener%.ora set oraclePath=C:\oracle\product\10.2.0\db_1\network\ADMIN

  9. echo. 输入座席号码,请严格按座席号码输入。
  10. echo. 如果座席号码为1-9号,输入数字前要加0:
  11. set /p Nubmer=
  12. echo 座席号码(IP Number)是 %Nubmer%
  13. set IP=%Nubmer%
  14. ren %listener%.ora %listener%.txt

  15. setlocal Enabledelayedexpansion
  16. for /f "tokens=*" %%a in (%listener%.txt) do (
  17. set var=%%a
  18. set var=!var:XX=%Nubmer%!
  19. echo !var!>>%listener%1.txt
  20. )
  21. endlocal

  22. ren %listener%1.txt %listener%.ora
  23. copy %listener%.ora %oraclePath% /y 1>NUl 2>nul
  24. del %listener%.ora
  25. ren %listener%.txt %listener%.ora

  26. echo 文件复制完成
  27. echo.
  28. pause
复制代码

多了个%IP%变量忘了去掉,是用来设置静态IP地址和计算机名称的。因为经过tokens命令之后%Numner%变量会清空,所以要提前多设置一个变量。
作者: 红毛樱木    时间: 2020-11-15 02:15
a.ora
是什么格式编码?
ANSI吗?
作者: 窄口牛    时间: 2020-11-15 06:15
本帖最后由 窄口牛 于 2020-11-15 07:32 编辑

没有说明白。可能是他自己自己写错了,输入99改成pc-99,输入01,最后那段里面应该是pc-01,可能是写错了?
作者: junyee    时间: 2020-11-15 07:11
本帖最后由 junyee 于 2020-11-15 07:13 编辑

批处理 处理文件能力较弱,如果文件中包括空行,或编码非 ansi/unicode 也麻烦。

用linux的  sed 会比较简单。

或用 powershell

  1. cat a.ora|Foreach-Object {$_ -replace "PC-88","PC-99"}
复制代码







作者: nttwqz    时间: 2020-11-15 08:04
用for findstr set可以实现文件修改,我在路上,不方便编写,大体上是用findstr行号,冒号分割,支持特殊符号空行,批处理之家有,你搜搜
作者: 9001    时间: 2020-11-15 08:12
红毛樱木 发表于 2020-11-15 02:15
a.ora
是什么格式编码?
ANSI吗?

是ANSI

作者: 9001    时间: 2020-11-15 08:13
刚上电脑,谢谢一众大佬回复。
作者: 9001    时间: 2020-11-15 08:16
窄口牛 发表于 2020-11-15 06:15
没有说明白。可能是他自己自己写错了,输入99改成pc-99,输入01,最后那段里面应该是pc-01,可能是写错了?

对对,牛大。半夜手机发帖,想的跟打字不同步了。
作者: 窄口牛    时间: 2020-11-15 11:18
我只能帮助理清要求,替换这块,我也玩不了。
作者: slore    时间: 2020-11-15 11:40
VBS替换吧。直接正则表达式。

感觉楼主潜在要求没说明。这个文件中的PC-88不是固定的吧?
如果是过99可能变成PC-99,下次需要把PC-99替换成PC-输入ID吧。

不管是固定还是不固定,VBS直接replace就好了。
作者: 9001    时间: 2020-11-15 14:38
slore 发表于 2020-11-15 11:40
VBS替换吧。直接正则表达式。

感觉楼主潜在要求没说明。这个文件中的PC-88不是固定的吧?

原先是这样,88可能变化。后来简化了要求,直接从固定机器取得初始文件,里面的标志是固定的PC-XX,所以好搞了。
作者: 9001    时间: 2020-11-15 14:47
9001 发表于 2020-11-15 14:38
原先是这样,88可能变化。后来简化了要求,直接从固定机器取得初始文件,里面的标志是固定的PC-XX,所以 ...

本批处理输入座席号,将座席号码注入当前目录下的ora文件(默认已经取得listener.ora),并放到oracle对应的配置文件(%oraclePath%\listener.ora)中。
SetIP.txt (890 Bytes, 下载次数: 5)
已实现,谢谢大家!






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