1

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

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

请让我知道是否有任何仅使用命令的解决方案。

4

6 回答 6

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%
于 2013-07-08T22:12:12.357 回答
1

如果您在这两种状态之间来回切换,创建两个具有不同名称的文件副本以及几个批处理文件(例如actionService1.batactionService2.bat)以在文件上复制适当的文件可能会更容易APP

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

于 2013-07-08T21:56:10.590 回答
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
于 2013-07-09T00:22:19.837 回答
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

Two ways here. You would need to redirect your choice to a new file as you cannot update in-place.

于 2013-07-09T00:36:15.240 回答
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
于 2013-07-09T08:49:09.383 回答
0

做一个快速的谷歌搜索我发现了这个http://www.dostips.com/?t=Batch.FindAndReplace

于 2013-07-08T21:43:51.993 回答