首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Windows (而不是powershell)搜索和替换文本文件中包含"=“字符的字符串

如何使用Windows (而不是powershell)搜索和替换文本文件中包含"=“字符的字符串
EN

Stack Overflow用户
提问于 2018-10-23 00:30:46
回答 2查看 118关注 0票数 1

我是在其他一些例子的基础上编写这段代码的,但却无法让它发挥作用?(这是一个.bat文件)?使用所有旧行编写新文件的代码不会直接用"=“字符编辑这三行。有人能给我指个正确的方向吗?

这就是INTOUCH.INI文件开始时的样子:

代码语言:javascript
复制
[InTouch]  
AppMode=2  
AppName0=test  
AppName1=  
AppName2=  
AppName3=  
AppDesc0=New InTouch application  
AppDesc1=  
AppDesc2=  
AppDesc3=  
SAOConverted=1  
WinFullScreen=1  
WinLeft=-4  
WinTop=-4  
WinWidth=1032  
WinHeight=748  
UseNewSendKeys=1  
DebugScripts=0  
UseBigBitmap=1  
WindowViewerStartupIconic=0  
CloseOnTransfer=0

这就是所写的:

代码语言:javascript
复制
[InTouch]  
AppMode=2  
AppName0=test  
AppName1=  
AppName2=  
AppName3=  
AppDesc0=New InTouch application  
AppDesc1=  
AppDesc2=  
AppDesc3=  
SAOConverted=1  
1=WinFullScreen=0=1  
WinLeft=-4  
WinTop=-4  
1032=WinWidth=1000=1032  
748=WinHeight=700=748  
UseNewSendKeys=1  
DebugScripts=0  
UseBigBitmap=1  
WindowViewerStartupIconic=0  
CloseOnTransfer=0 

这是我的.bat文件代码:

代码语言:javascript
复制
Set "OldString1=WinFullScreen=1"
Set "NewString1=WinFullScreen=0"
Set "OldString2=WinWidth=1032"
Set "NewString2=WinWidth=1000"
Set "OldString3=WinHeight=748"
Set "NewString3=WinHeight=700"

@ECHO OFF &SETLOCAL
cd /d F:\
for %%x in (INTOUCH.INI) do call:process "%%~x"
goto:eof

:process 
set "outFile=%~n1_edited%~x1" 
(for /f "skip=2 delims=:" %%a in ('find /n /v "" "INTOUCH.INI"') do (
      set "ln=%%a"
      Setlocal enableDelayedExpansion 
      set "ln=!ln:*]=!"
      if defined ln (
           set "ln=!ln:%OldString1%=%NewString1%!"
           set "ln=!ln:%OldString2%=%NewString2%!"
           set "ln=!ln:%OldString3%=%NewString3%!"
           )
      echo(!ln!
      endlocal
))>"%outFile%"
Exit /b
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-23 03:17:18

如果您使用该文件的格式作为您的优势,您可以在脚本顶部设置新变量的值,然后在从设置文件中读取变量名称时,可以看到是否定义了这些变量。如果定义了它们,则输出新值,否则输出原始值。

这方面的诀窍是,当您同时使用CALLECHO命令时,您会得到双变量展开。首先展开for变量的变量名,然后在展开的第二阶段展开变量的值。这就是额外的百分比符号集合的原因。

代码语言:javascript
复制
@echo off
Set "WinFullScreen=0"
Set "WinWidth=1000"
Set "WinHeight=700"

REM cd /d F:\

for %%F in (INTOUCH.INI) do set "outFile=%%~nF_edited%%~xF"

REM Read first line of file
set /p line1=<INTOUCH.INI
(echo %line1%
for /f "usebackq skip=1 tokens=1,2 delims==" %%G in ("INTOUCH.INI") do (
    if defined %%G (
        CALL echo %%G=%%%%G%%
    ) else (
        echo %%G=%%H
    )
))>"%outFile%"
Exit /b
票数 2
EN

Stack Overflow用户

发布于 2018-10-23 06:42:11

代码语言:javascript
复制
@echo off

Set "AppMode=x"
Set "WinFullScreen=0"
Set "WinWidth=1000"
Set "WinHeight=700"

for /f "skip=1 usebackq tokens=1,2 delims==" %%G in ("a.INI") do call :proc "%%G" %%H

exit /b

:proc
set val=%2
for /F "tokens=* eol= " %%S in ("%~1") do set trimmed=%%S
call :getoverrideval %trimmed%
if "%override%" == "" (
  echo %~1=%2%
) else (
  echo %~1=%override%
)
goto :EOF

:getoverrideval
call set override=%%%1%%

输出:

代码语言:javascript
复制
C:\Users\w16coreeval>cmd /c a.bat
 AppMode=x
 AppName0=test
 AppName1=
 AppName2=
 AppName3=
 AppDesc0=New
 AppDesc1=
 AppDesc2=
 AppDesc3=
 SAOConverted=1
 WinFullScreen=0
 WinLeft=-4
 WinTop=-4
 WinWidth=1000
 WinHeight=700
 UseNewSendKeys=1
 DebugScripts=0
 UseBigBitmap=1
 WindowViewerStartupIconic=0
 CloseOnTransfer=0
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52939471

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档