1

我创建了一个 .cmd 文件,它以文件名作为参数,然后它要求查找字符串,然后要求替换字符串。

想要的输出

findthis 应该从给定文件中替换为 replacewith 但它不起作用

以下是我尝试过的代码..

@echo off
setlocal enabledelayedexpansion

if not exist "%1" (echo this file does not exist...)&goto :eof

set /p findthis=find this text string:
set /p replacewith=and replace it with this:


for /f "tokens=*" %%a in (%1) do (

   set write=%%a
   if %%a==%findthis% set write=%replacewith%

   echo !write! 
   echo !write! >>%~n1.replaced%~x1
)

谢谢

4

1 回答 1

0

我已经修复了您的代码中有几个简单的错误。您应该将字符串放在引号中,因为它们很可能包含空格。有时它们可​​能是一个导致回显问题的空字符串,所以我添加了一个“;” 回声来处理这个问题:

@echo off
setlocal enabledelayedexpansion

if not exist "%1" (echo this file does not exist...)&goto :eof

set /p findthis=find this text string:
set /p replacewith=and replace it with this:


for /f "tokens=*" %%a in (%1) do (

   set write=%%a
   if "%%a"=="%findthis%" set write=%replacewith%

   echo;!write! 
   echo;!write! >>%~n1.replaced%~x1
)

但是,这只能匹配和替换整行,而不是行内的文本字符串。要替换一行中的子字符串,您必须使用变量字符串替换语法(在问题中多次引用:here和 finally here

后一个答案包含解决原始问题所需的一切。

于 2014-12-26T09:58:24.297 回答