我正在编写一个批处理脚本,我希望打开一个文件,然后更改它的第二行。我想找到字符串“cat”并将其替换为我设置的值,即 %var% 。我只希望这发生在第二行(或前 3 次)。你会怎么做呢?
John
问问题
7135 次
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
这对于本机批处理脚本来说是很难看的。我要么
在 VBScript 中执行此操作。如果您真的需要在批处理文件中使用它,您可以从批处理脚本中调用 VBScript 文件。您甚至可以将 %var% 作为参数传递给 VBScript。
使用 sed 脚本。Unix 命令有 Windows 端口,例如GnuWin32、GNU Utilities for Win32(我使用这些)或Cygwin。
于 2008-12-05T14:20:41.077 回答
-2
我会创建一个脚本:
- 扫描输入文件
- 写入第二个输出文件
- 删除输入
- 重命名输出
至于要解析的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 回答