我有一个xml:
<?xml version="1.0"?>
<arquivoposicao_4_01 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<fundo xmlns="http://tempuri.org/">
<header>
我只想替换de string“xmlns =”,例如:“dog =”。
我正在使用这个.bat:
@echo off
REM -- Prepare the Command Processor --
SETLOCAL ENABLEEXTENSIONS
SETLOCAL DISABLEDELAYEDEXPANSION
if "%~1"=="" findstr "^::" "%~f0"&GOTO:EOF
for /f "tokens=1,* delims=]" %%A in ('"type %3|find /n /v """') do (
set "line=%%B"
if defined line (
call set "line=echo.%%line:%~1=%~2%%"
for /f "delims=" %%X in ('"echo."%%line%%""') do %%~X
) ELSE echo.
)
我使用:file.bat“xmlns =”“dog =”nome.txt 但它将“xlmns =”替换为“= dog =”。
PS:我只想替换第三行,第二行不是。
答案 0 :(得分:1)
@ECHO Off
REM -- Prepare the Command Processor --
SETLOCAL ENABLEEXTENSIONS
SETLOCAL DISABLEDELAYEDEXPANSION
REM if "%~1"=="" findstr "^::" "%~f0"&GOTO:EOF
:: Replacing parameters with fixed strings for testing
SET "p1=xmlns"
SET "p2=dog"
SET "p3=q24511441.txt"
for /f "tokens=1,* delims=]" %%A in ('"type %p3%|find /n /v """') do (
set "line=%%B"
if defined line (
ECHO("%%B"|FIND "%p1%="
IF ERRORLEVEL 1 (ECHO(%%B) ELSE (
call set "line=%%line:%p1%=%p2%%%"
for /f "tokens=1*delims==" %%X in ('set line') do ECHO(%%Y
)
) ELSE ECHO(
)
GOTO :EOF
这是一种类似于你想要的东西的方法。
问题似乎是替换文本语法使用=
将目标字符串与替换字符串分开。
你的日常工作似乎旨在成为一个普遍的替换 - 一个字符串与另一个例程。批处理并不适合这项任务,但可以在限制范围内完成。
我已将参数%1..%3
替换为固定文本以进行测试。该例程将用于将%1=
替换为%2=
,并不完美。它将xmlns
单独留在不包含xmlns=
的行上,并替换包含xmlns
和xmlns=
的行上的任何dog
。
我使用了一个名为q24511441.txt
的文件,其中包含我的测试数据。
答案 1 :(得分:0)
替换包含“=”的这样的字符串在windows批处理中是非常明显的,因为它无法转义或引用它(我知道)。
请点击此处查看一些提示:Escaping an equals sign in DOS batch string replacement command
使用search / replace和regex解析/修改批处理脚本中的XML通常是一个坏主意,可能存在大量问题和问题。最好用提供XML解析库的语言编写程序(例如java,perl等)。