我是批处理文件脚本的新手,需要开发一个脚本来使用批处理脚本替换文件中的字符。
我必须替换“servername / ActionService.asmx,1” “servername / ActionService.asmx,0” 在名为APP的文件中。
如果有任何解决方案只使用命令,请告诉我。
答案 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工具APP
和sed
,它们在这种类型的文件操作方面表现优异。
答案 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