求个批处理:输入字符串替换文件中指定标志内容
本帖最后由 9001 于 2020-11-15 15:12 编辑使用场景:
有个文件a.ora包含座位信息,标志是PC-88之类,88之类座位号为01-99。需要运行批处理,输入座号如99,然后打开a.ora将88替换为99。
“PC-”是标志,要更换的是其后面两位数字。
比如a.ora内容:
XXXXXXXXXX
XXPC-88,XXX
XXXXXPC-88XXX
XX为任意字符,PC-是唯一标志,不会有歧义。
如果输入01,那么改动保存的a.ora内容应该是
XXXXXXXXXX
XXPC-01,XXX
XXXXXPC-01XXX
上面是原先的要求,实现时由于88内容可能变化,需要VBS替换。退而求其次简化要求,从固定机器下载listener. ora后再更改注入座席号,实现得很丑陋:
rem 输入座席号,将座席号码注入当前目录下的ora文件,并放到oracle对应的配置文件中。
@echo off
color 3f
PUSHD %~dp0
title 座席席位设置
set listener=listener
set oraclePath=C:\oracle\product\10.2.0\db_2\network\ADMIN
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
echo. 输入座席号码,请严格按座席号码输入。
echo. 如果座席号码为1-9号,输入数字前要加0:
set /p Nubmer=
echo 座席号码(IP Number)是 %Nubmer%
set IP=%Nubmer%
ren %listener%.ora %listener%.txt
setlocal Enabledelayedexpansion
for /f "tokens=*" %%a in (%listener%.txt) do (
set var=%%a
set var=!var:XX=%Nubmer%!
echo !var!>>%listener%1.txt
)
endlocal
ren %listener%1.txt %listener%.ora
copy %listener%.ora %oraclePath% /y 1>NUl 2>nul
del %listener%.ora
ren %listener%.txt %listener%.ora
echo 文件复制完成
echo.
pause
多了个%IP%变量忘了去掉,是用来设置静态IP地址和计算机名称的。因为经过tokens命令之后%Numner%变量会清空,所以要提前多设置一个变量。 a.ora
是什么格式编码?
ANSI吗? 本帖最后由 窄口牛 于 2020-11-15 07:32 编辑
没有说明白。可能是他自己自己写错了,输入99改成pc-99,输入01,最后那段里面应该是pc-01,可能是写错了? 本帖最后由 junyee 于 2020-11-15 07:13 编辑
批处理 处理文件能力较弱,如果文件中包括空行,或编码非 ansi/unicode 也麻烦。
用linux的sed 会比较简单。
或用 powershell
cat a.ora|Foreach-Object {$_ -replace "PC-88","PC-99"}
用for findstr set可以实现文件修改,我在路上,不方便编写,大体上是用findstr行号,冒号分割,支持特殊符号空行,批处理之家有,你搜搜 红毛樱木 发表于 2020-11-15 02:15
a.ora
是什么格式编码?
ANSI吗?
是ANSI
刚上电脑,谢谢一众大佬回复。 窄口牛 发表于 2020-11-15 06:15
没有说明白。可能是他自己自己写错了,输入99改成pc-99,输入01,最后那段里面应该是pc-01,可能是写错了?
对对,牛大。半夜手机发帖,想的跟打字不同步了。 我只能帮助理清要求,替换这块,我也玩不了。 VBS替换吧。直接正则表达式。
感觉楼主潜在要求没说明。这个文件中的PC-88不是固定的吧?
如果是过99可能变成PC-99,下次需要把PC-99替换成PC-输入ID吧。
不管是固定还是不固定,VBS直接replace就好了。 slore 发表于 2020-11-15 11:40
VBS替换吧。直接正则表达式。
感觉楼主潜在要求没说明。这个文件中的PC-88不是固定的吧?
原先是这样,88可能变化。后来简化了要求,直接从固定机器取得初始文件,里面的标志是固定的PC-XX,所以好搞了。 9001 发表于 2020-11-15 14:38
原先是这样,88可能变化。后来简化了要求,直接从固定机器取得初始文件,里面的标志是固定的PC-XX,所以 ...
本批处理输入座席号,将座席号码注入当前目录下的ora文件(默认已经取得listener.ora),并放到oracle对应的配置文件(%oraclePath%\listener.ora)中。
已实现,谢谢大家!
页:
[1]