9001 发表于 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内容:

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%变量会清空,所以要提前多设置一个变量。

红毛樱木 发表于 2020-11-15 02:15:59

a.ora
是什么格式编码?
ANSI吗?

窄口牛 发表于 2020-11-15 06:15:37

本帖最后由 窄口牛 于 2020-11-15 07:32 编辑

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

junyee 发表于 2020-11-15 07:11:20

本帖最后由 junyee 于 2020-11-15 07:13 编辑

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

用linux的sed 会比较简单。

或用 powershell

cat a.ora|Foreach-Object {$_ -replace "PC-88","PC-99"}






nttwqz 发表于 2020-11-15 08:04:20

用for findstr set可以实现文件修改,我在路上,不方便编写,大体上是用findstr行号,冒号分割,支持特殊符号空行,批处理之家有,你搜搜

9001 发表于 2020-11-15 08:12:13

红毛樱木 发表于 2020-11-15 02:15
a.ora
是什么格式编码?
ANSI吗?

是ANSI

9001 发表于 2020-11-15 08:13:13

刚上电脑,谢谢一众大佬回复。

9001 发表于 2020-11-15 08:16:16

窄口牛 发表于 2020-11-15 06:15
没有说明白。可能是他自己自己写错了,输入99改成pc-99,输入01,最后那段里面应该是pc-01,可能是写错了?

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

窄口牛 发表于 2020-11-15 11:18:11

我只能帮助理清要求,替换这块,我也玩不了。

slore 发表于 2020-11-15 11:40:37

VBS替换吧。直接正则表达式。

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

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

9001 发表于 2020-11-15 14:38:35

slore 发表于 2020-11-15 11:40
VBS替换吧。直接正则表达式。

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


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

9001 发表于 2020-11-15 14:47:50

9001 发表于 2020-11-15 14:38
原先是这样,88可能变化。后来简化了要求,直接从固定机器取得初始文件,里面的标志是固定的PC-XX,所以 ...
本批处理输入座席号,将座席号码注入当前目录下的ora文件(默认已经取得listener.ora),并放到oracle对应的配置文件(%oraclePath%\listener.ora)中。

已实现,谢谢大家!

页: [1]
查看完整版本: 求个批处理:输入字符串替换文件中指定标志内容