使用批处理文件命令替换字符串

问题描述 投票:0回答:3

想要使用批处理文件命令替换文本文件“list.txt”中的某些字符串。

我想使用Windows中的一些批处理文件命令将文件“list.txt”中的C:\替换为“adb install C:\”。

并从“list.txt”中删除包含“.txt”文件的行

在linux中,我曾经使用grep命令执行此操作

这该怎么做?

windows batch-file
3个回答
1
投票

试试这个:

@ECHO OFF &SETLOCAL disableDelayedExpansion
SET "inFileName=infile.txt"
SET "outFileName=outfile.txt"
(FOR /f "delims=" %%a IN ('FINDSTR /n "^" "%FileName%"') DO (
    SET "PrimLine=%%a"
    SETLOCAL enableDelayedExpansion
    SET "Line=!PrimLine:*:=!"
    SET "Line=!Line:C:\=adb install C:\!"
    IF "!Line:txt=!"=="!Line!" ECHO(!Line!
    ENDLOCAL
))>"%outFileName%"

0
投票

请尝试以下方法

for /f "usebackq delims=." %x in (`findstr C:\ list.txt`) do echo adb install %x

for / f将一次一个地挑选list.txt的内容

delims =。在第一个停止。缺点是,如果有两个。在文件名中,它只在第一个停止。


0
投票

我正在寻找一种快速而肮脏的方法来使用内置的批处理文件命令进行一些简单的搜索/替换,但不是很多代码。这个问题突然出现在顶部,@ Endoro的回答接近我所需要的,但它有一些问题。一个是拼写错误(应该是%inFileName%而不是%FileName%),另一个是输出空白行的C:\=adb install C:\

下面是他的批处理脚本的修改版本,它修复了这两个问题并使用环境变量来搜索和替换值。我不需要删除.txt行,所以我删除了那部分。它没有经过广泛测试,但它确实适合我的目的。也许它也会帮助别人。

@ECHO OFF &SETLOCAL disableDelayedExpansion
SET "inFileName=infile.txt"
SET "outFileName=outfile.txt"
SET "SearchVal=C:\"
Set "ReplaceVal=adb install C:\"
(FOR /f "delims=" %%a IN ('FINDSTR /n "^" "%inFileName%"') DO (
    SET "PrimLine=%%a"
    SETLOCAL enableDelayedExpansion
    SET "Line=!PrimLine:*:=!"
    SET "Line=!Line:%SearchVal%=%ReplaceVal%!"
    IF "%SearchVal%=%ReplaceVal%"=="!Line!" ECHO.
    IF NOT "%SearchVal%=%ReplaceVal%"=="!Line!" ECHO(!Line!
    ENDLOCAL
))>"%outFileName%"
© www.soinside.com 2019 - 2024. All rights reserved.