我需要创建一个批处理文件,使用它可以修改文件的内容。
例如
Testing.txt文件包含一行 描述= MAN_Human 改成 描述= MAN_Human_V2
仅在MAN的末尾添加(_V2)
因此,当我们打开文件时,我们只有MAN的描述名称MAN_Human_V2。
我有多个文件要处理。请帮忙。
答案 0 :(得分:2)
您可以使用for
循环遍历文件的每一行,当您找到带有“描述”的行时,将'_V2'附加到输出。
@echo off
for %%f in (*.txt) do (
for /f "tokens=1* delims=:" %%g in ('type "%%f" ^| findstr /n /v "BoGuSsTrInG"') do (
if "%%hx"=="x" (
echo.>>"%%~nf.newtxt"
) else (
for /f "tokens=1* delims==" %%i in ('echo.%%h') do (
if "%%i"=="Description" (
echo.%%i=%%j_V2>>"%%~nf.newtxt"
) else (
if "%%jx"=="x" (
echo.%%i>>"%%~nf.newtxt"
) else (
echo.%%i=%%j>>"%%~nf.newtxt"
)
)
)
)
)
)
ren *.txt *.oldtxt
ren *.newtxt *.txt
当然,您必须在处理test.txt
文件时将内容输出到新文件。然后用新创建的文件替换原始文件......
在将任何文件重命名为原始名称之前,必须将TXT文件的内容完全复制到新文件中。这是因为for
循环会在修改它们之后再次修改它们,如果您立即重命名它们中的一些将会多次附加_V2
。
我最后没有删除.oldtxt
文件,因为在您知道该过程有效之前,不应该销毁原始文件!
我发现有一种解决方法可以保留空白行。解决方法将文本文件的内容传递给findstr
,搜索所有不包含BoGuSsTrInG
的行。输出包括行号(使其打印空行的唯一方法)。行号有一个尾随冒号(:
),因此我们可以将输出分成不同的变量来分割冒号上的内容。 tokens=1*
将行号拆分为%%g
变量,行的结果位于%%h
变量中。我们可以测试%%h
以查看它是否为空,并在新文件中添加一个空行。否则,我们会像以前一样处理%%h
。
答案 1 :(得分:1)
您可以下载sed
(unix实用程序 - Google sed windows
)
sed -i 's/Description=MAN_Human/Description=MAN_Human_V2/' test.txt
-i
表示就地,即将结果写回同一文件(而不是在屏幕上显示)。第二个参数表示s
ubstitute ... to ...,其余的是(文件列表)要执行此操作的文件。 Google man sed
了解更多信息