0

我正在编写一个批处理脚本,我希望打开一个文件,然后更改它的第二行。我想找到字符串“cat”并将其替换为我设置的值,即 %var% 。我只希望这发生在第二行(或前 3 次)。你会怎么做呢?

4

4 回答 4

1

我只是自己解决。它只会在第二行查找 var 。

@echo OFF
SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
SET filename=%1
set LINENO=0    
for /F "delims=" %%l in (%filename%) do (
 SET /A LINENO=!LINENO!+1
 IF "!LINENO!"=="2" ( call echo %%l ) ELSE ( echo %%l )
)

但我更喜欢使用 cscript(vbscript 甚至 jscript)。

于 2008-12-05T15:17:55.593 回答
0

首先,使用批处理文件来实现这一点很麻烦(恕我直言)。无论如何,您都必须使用外部工具来进行字符串替换。我会改用一些脚本语言。

如果你真的想使用批处理,会让你开始。

于 2008-12-05T14:14:30.120 回答
0

这对于本机批处理脚本来说是很难看的。我要么

  1. 在 VBScript 中执行此操作。如果您真的需要在批处理文件中使用它,您可以从批处理脚本中调用 VBScript 文件。您甚至可以将 %var% 作为参数传递给 VBScript。

  2. 使用 sed 脚本。Unix 命令有 Windows 端口,例如GnuWin32GNU Utilities for Win32(我使用这些)或Cygwin

于 2008-12-05T14:20:41.077 回答
-2

我会创建一个脚本:

  1. 扫描输入文件
  2. 写入第二个输出文件
  3. 删除输入
  4. 重命名输出

至于要解析的dos命令,我做了一个谷歌搜索并想出了一个很好的起点:

@echo off
setlocal enabledelayedexpansion

set file=c:\file.txt
set output=output.txt
set maxlines=5000

set count=0

for /F "tokens=* usebackq" %%G in ("%file%") do (
 if !count!==%maxlines% goto :eof

 set line=%%G
 set line=!line:*000000000000=--FOUND--!
 if "!line:~0,9!"=="--FOUND--" (
  echo %%G>>"%output%"
  set /a count+=1
 )
)

(从 Intarwebnet 窃取)

于 2008-12-05T14:19:40.157 回答