无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 4819|回复: 11
打印 上一主题 下一主题

[已解决] 求个批处理:输入字符串替换文件中指定标志内容

[复制链接]
跳转到指定楼层
1#
发表于 2020-11-15 01:03:18 来自手机 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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%变量会清空,所以要提前多设置一个变量。
2#
发表于 2020-11-15 02:15:59 来自手机 | 只看该作者
a.ora
是什么格式编码?
ANSI吗?

点评

是ANSI  详情 回复 发表于 2020-11-15 08:12
回复

使用道具 举报

3#
发表于 2020-11-15 06:15:37 来自手机 | 只看该作者
本帖最后由 窄口牛 于 2020-11-15 07:32 编辑

没有说明白。可能是他自己自己写错了,输入99改成pc-99,输入01,最后那段里面应该是pc-01,可能是写错了?

点评

对对,牛大。半夜手机发帖,想的跟打字不同步了。  详情 回复 发表于 2020-11-15 08:16
回复

使用道具 举报

4#
发表于 2020-11-15 07:11:20 | 只看该作者
本帖最后由 junyee 于 2020-11-15 07:13 编辑

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

用linux的  sed 会比较简单。

或用 powershell

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






回复

使用道具 举报

5#
发表于 2020-11-15 08:04:20 来自手机 | 只看该作者
用for findstr set可以实现文件修改,我在路上,不方便编写,大体上是用findstr行号,冒号分割,支持特殊符号空行,批处理之家有,你搜搜
回复

使用道具 举报

6#
 楼主| 发表于 2020-11-15 08:12:13 来自手机 | 只看该作者
红毛樱木 发表于 2020-11-15 02:15
a.ora
是什么格式编码?
ANSI吗?

是ANSI
回复

使用道具 举报

7#
 楼主| 发表于 2020-11-15 08:13:13 来自手机 | 只看该作者
刚上电脑,谢谢一众大佬回复。
回复

使用道具 举报

8#
 楼主| 发表于 2020-11-15 08:16:16 来自手机 | 只看该作者
窄口牛 发表于 2020-11-15 06:15
没有说明白。可能是他自己自己写错了,输入99改成pc-99,输入01,最后那段里面应该是pc-01,可能是写错了?

对对,牛大。半夜手机发帖,想的跟打字不同步了。
回复

使用道具 举报

9#
发表于 2020-11-15 11:18:11 来自手机 | 只看该作者
我只能帮助理清要求,替换这块,我也玩不了。
回复

使用道具 举报

10#
发表于 2020-11-15 11:40:37 | 只看该作者
VBS替换吧。直接正则表达式。

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

不管是固定还是不固定,VBS直接replace就好了。

点评

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

使用道具 举报

11#
 楼主| 发表于 2020-11-15 14:38:35 来自手机 | 只看该作者
slore 发表于 2020-11-15 11:40
VBS替换吧。直接正则表达式。

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

原先是这样,88可能变化。后来简化了要求,直接从固定机器取得初始文件,里面的标志是固定的PC-XX,所以好搞了。

点评

本批处理输入座席号,将座席号码注入当前目录下的ora文件(默认已经取得listener.ora),并放到oracle对应的配置文件(%oraclePath%\listener.ora)中。  详情 回复 发表于 2020-11-15 14:47
回复

使用道具 举报

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

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

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-11-27 10:48

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表