[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] [已解决]批处理如何根据输入的字符串替换文本里固定行中的固定字符后面4位

本帖最后由 zidha 于 2019-8-5 19:05 编辑

我有一个1.xml文件,想修改文件里固定行数的字符串,如下只截取了一部分:
  1. <component name="Microsoft">
  2.             <ComputerName>PCZF0001</ComputerName>
  3.             <TimeZone>China Standard time</TimeZone>
  4.         </component>
复制代码
我想修改这行 <ComputerName>PCZF0001</ComputerName>的PCZF0001,PCZF001后边的4个数字是不确定的;

需要手动输入,如输入0002,就如下:
<ComputerName>PCZF0002</ComputerName>

如输入0003,就如下:
<ComputerName>PCZF0003</ComputerName>

如输入0999,就如下:
<ComputerName>PCZF0999</ComputerName>

以此类推,如何用批处理修改,先谢谢了。

回复 2# flashercs

是的

TOP

flashercs 发表于 2019-8-4 11:40

谢谢你的解答!
我试了下但报错,
  1. True
  2. Modify XML
  3. 请输入需要替换的字符串:
  4. From: 8888
  5. To: 3333
  6. 在此对象上找不到属性“nodeValue”。请确认该属性存在并且可设置。
  7. 所在位置 行:35 字符: 60
  8. + ... .SelectSingleNode("//ComputerName[text()=`"$prefix$($dic.From)`"]/tex ...
  9. +                                                         ~~~~~~~~~
  10.     + CategoryInfo          : InvalidOperation: (:) [],RuntimeException
  11.     + FullyQualifiedErrorId : PropertyNotFound
  12. 请按任意键继续. . .
复制代码
可不可是纯批处理脚本,因为我要在WinPE下运行的;
还有就是最好就是直接修改,不要输入原来字串,因为不能每次使用时打开文件查看一下PCZF后面4个字符。

TOP

回复 6# /zhqsystem/zhq
我要的是修改文件内的字符,不是文件名;我把论坛的“批处理For语句从入门到精通(完整版)”读了一遍也没能在你的文件上修改成功
我是新手,能力有限,7楼的朋友已经帮我解决了,不过还是感谢你的解答。
我找了个批处理但是有些问题如下:
  1. @echo off&setlocal enabledelayedexpansion
  2. ren abc.xml abc.txt
  3. set /p pcname=Name:
  4. for /f "delims=" %%a in (abc.txt) do (
  5.    set /a num+=1
  6.    if !num!==88 (echo "            <ComputerName>!pcname!</ComputerName>") else echo %%a
  7. )>>abc.xml
  8. del  abc.txt
  9. pause
复制代码
修改后的那行总是被添加了两个""如下:
  1. "            <ComputerName>8888</ComputerName>"
复制代码
但去掉就闪退,”“去掉后,文字里的"<”“>”可能被识别成命令符了。

TOP

回复 7# zaqmlp
非常感谢你,这个脚本可以达到我要的结果;
还想请教个问题,直接修改原文件而不生成新文件,需要怎么做,或者指点下需要使用什么命令或哪方面资料吗?

TOP

回复 10# Batcher

非常感谢!这样是可以的,但中间不生成临时文件可以吗?

TOP

回复 11# Batcher

太感谢了,看了“转帖:批处理中符号的作用”再参考7楼的脚本,修改了下我之前的找到脚本也可以达到效果了。
  1. @echo off&setlocal enabledelayedexpansion
  2. ren abc.xml abc.txt
  3. set /p pcname=Name:
  4. for /f "delims=" %%a in (abc.txt) do (
  5.    set /a num+=1
  6.    if !num!==88 (echo             ^<ComputerName^>PCZF!pcname!^</ComputerName^>) else echo %%a
  7. )>>abc.xml
  8. del  abc.txt
  9. pause
复制代码

TOP

回复 15# xczxczxcz


    谢谢!Powershell是很强大,但WinPE下兼容问题不好解决;我把7楼的脚本在WinPE下跑了下,

本地系统测试过的,没问题,就跑出来“findstr”不是内部命令不支持的问题,

最后提取Win10系统里“findstr.exe”文件封进启动映像里才解决。

TOP

回复 16# Batcher


    收到,非常感谢!

TOP

返回列表