我是批处理新手,所以我尝试阅读一些解决方案,但它对我不起作用。 我需要循环一些文件并搜索字符串
<IDOC BEGIN='1'>
并将其替换为 <IDOC BEGIN="1">
。
首先,我为文件路径定义了一些变量,并使用它打开 for 循环来获取我的文件。奇迹般有效。现在我需要获取 Filecontent 并替换特定字符串并将更改内容保存到该文件。
这是我的实际批处理代码:
@echo off
setlocal enableDelayedExpansion
set "SEARCHSTRING=<IDOC BEGIN='1'>"
set "REPLACESTRING=<IDOC BEGIN="1">"
if "%1" == "TP" goto VARS_TP
if "%1" == "JP" goto VARS_JP
goto ENDE
:VARS_TP
set DIVISION=
goto WEITER
:VARS_JP
set DIVISION=JP
:WEITER
set "VOLUME=D:"
set "SCRIPTDIR=%VOLUME%\Skript"
set "EDIDIR=%VOLUME%\Test%DIVISION%"
set "IN=%EDIDIR%\IN"
set "REORG=%EDIDIR%\REORG"
for %%i in (%IN%\ORDRSP*.xml) do @(
echo %%i
rem findstr /C:"%SEARCHSTRING%" /F:%%i
for /f "tokens=*" %%j in ('type %%i') do (
echo %%j
)
)
:ENDE
endlocal && goto :eof
未调用
echo %%j
,因此我无法调试它。
我的第一反应是使用免费软件实用程序,如
sed
、awk
或 gawk
来解决这个问题。
使用批处理希望能够用另一个字符串替换任何常规字符串是一个雷区。
也许可以用另一种方式解决问题,例如:
FOR /f "usebackqdelims=" %%e IN ("%filename1%") DO (
ECHO %%e|FINDSTR /i /L /c:"%SEARCHSTRING%" >NUL
IF ERRORLEVEL 1 (ECHO/%%e) ELSE (
SET "line=%%e"
ECHO !line:'="!
)
)
应该适用于当前明显的目标,在包含
'
的行上将 "
替换为 searchstring
。这种方法对 OP 的情况有多适用是 OP 关心的问题。