我正在尝试创建一个批处理文件,它将找到一个字符串并将其替换为来自记事本文件的字符串
例如:
我在XYZ.txt中有以下内容
< Xml 3.0>
设置bjuih
fjgfgfr
GA JHJA KSKASA
设置Oid值=' 1.2.3.456.7 '
gshdasdsad
端
我希望将粗体中提到的数字替换为来自名为ABC.txt的文件的值
我能够写下面的代码;但它没有按预期工作。
@echo off
SET InFile=C:\Test\Apple\XYZ.txt
FOR /F "tokens=*" %%A IN ('FINDSTR "1.2.3.456.7 "%InFile%"') DO CALL :FindString "%%A"
pause
goto :eof
:FindString
SET String=%~1
SET String=%String:1.2.3.456.7=abc%
echo.%String%>C:\Test\Apple\XYZ.txt
尽快帮助解决此问题。
答案 0 :(得分:0)
我不知道如何在普通的cmd批处理文件中执行此操作,但如果您可以使用PowerShell,我之前遇到过类似的问题,我在此处记录了解决方案:
PowerShell代码段是:
Param (
[String]$List = "ReplacementList.csv",
[String]$Files = ".\Files\*.*"
)
$ReplacementList = Import-Csv $List;
Get-ChildItem $Files |
ForEach-Object {
$Content = Get-Content -Path $_.FullName;
foreach ($ReplacementItem in $ReplacementList)
{
$Content = $Content.Replace($ReplacementItem.OldValue, $ReplacementItem.NewValue)
}
Set-Content -Path $_.FullName -Value $Content
}
答案 1 :(得分:0)
@ECHO OFF
SETLOCAL
SET "sourcedir=."
(
FOR /f "delims=" %%a IN ('type "%sourcedir%\abc.txt"') DO (
SET "replacement=%%a"
FOR /f "delims=" %%b IN ('type "%sourcedir%\xyz.txt"') DO (
SET "line=%%b"
CALL :subs
IF DEFINED line ECHO %%b
)
)
)>newfile.txt
GOTO :EOF
:subs
SET "newline=%line:SET Oid value=%"
IF "%newline%"=="%line%" GOTO :EOF
SET "line="
ECHO Set Oid value = '%replacement%'
GOTO :eof
此批处理只是将文件重建为newfile.txt
。我使用.
作为目标 - 您需要替换目录名。
请注意,您无法就地更新文件 - 您必须创建一个新文件newfile.txt
此and then
移动it over the original version (
move / y`将替换为问)。
答案 2 :(得分:0)
测试一下:
@echo off
>abc.txt echo 888.777.666
SET "InFile=C:\Test\Apple\XYZ.txt"
FOR /F "usebackq delims=" %%A IN ("abc.txt") do set "newstring=%%A"
FOR /F "usebackq delims=" %%A IN ("%InFile%") DO CALL :FindString "%%A"
move newfile.txt "C:\Test\Apple\XYZ.txt"
pause
goto :eof
:FindString
SET "String=%~1"
if not "%string:Set Oid value=%"=="%string%" (
>>newfile.txt echo Set Oid value = '%newstring%'
) else (
for %%z in ("%~1") do >>newfile.txt echo %%~z
)