使用批处理脚本替换文件中的字符

时间:2013-07-08 21:39:56

标签: batch-file

我是批处理文件脚本的新手,需要开发一个脚本来使用批处理脚本替换文件中的字符。

我必须替换“servername / ActionService.asmx,1” “servername / ActionService.asmx,0” 在名为APP的文件中。

如果有任何解决方案只使用命令,请告诉我。

6 个答案:

答案 0 :(得分:2)

您可以使用GNUWin32 sed

@ECHO OFF &SETLOCAL
set "string=servername/ActionService.asmx,1"
FOR /f %%a IN ('echo "%string%" ^| sed "s/[0-9]/0/"') DO set "newstring=%%~a"
ECHO %newstring%

答案 1 :(得分:1)

如果您在这两种状态之间来回切换,可能更容易创建具有不同名称的文件的两个副本,以及几个批处理文件(例如actionService1.bat和{{1} })将相应的文件复制到actionService2.bat文件上。

否则,您可能会考虑获取Windows版本的Unix工具APPsed,它们在这种类型的文件操作方面表现优异。

答案 2 :(得分:1)

下面的批处理文件假定目标字符串恰好有一行。这种方法相对较快。

@echo off
for /F "delims=:" %%a in ('findstr /N "servername/ActionService.asmx,1" theFile.txt') do set lineNum=%%a
(for /F "tokens=1* delims=:" %%a in ('findstr /N "^" theFile.txt do (
   set "line=%%b"
   setlocal EnableDelayedExpansion
   if %%a equ %lineNum% (
      echo !line:1=0!
   ) else (
      echo(!line!
   )
   endlocal
)) > theFile.new

答案 3 :(得分:1)

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
:: Way the first - suppresses emptylines
FOR /f "delims=" %%i IN (app) DO SET line=%%i&set line=!line:servername/ActionService.asmx,1=servername/ActionService.asmx,0!&ECHO(!line!
ECHO ====================
:: Way the second 
FOR /f "delims=" %%i IN ('type app^|findstr /n "$"') DO (
  SET line=%%i
  set line=!line:servername/ActionService.asmx,1=servername/ActionService.asmx,0!
  SET line=!line:*:=!
  ECHO(!line!
)
ECHO ====================
GOTO :EOF

这里有两种方式。您需要将您的选择重定向到新文件,因为您无法就地更新。

答案 4 :(得分:0)

进行快速谷歌搜索我发现了http://www.dostips.com/?t=Batch.FindAndReplace

答案 5 :(得分:0)

从此处使用名为repl.bat的帮助程序批处理文件:http://www.dostips.com/forum/viewtopic.php?f=3&t=3855

type app |repl "servername\/ActionService.asmx,1" "servername/ActionService.asmx,0" >appnew.txt