我需要创建一个批处理文件,我们可以使用它来修改文件的内容。
例如
Testing.txt 文件包含一行 Description=MAN_Human 更改为 Description=MAN_Human_V2
仅在 MAN 末尾添加 (_V2)
因此,当我们打开文件时,我们只有描述名称 MAN_Human_V2 而不是 MAN。
我有多个文件要处理。请帮忙。
我需要创建一个批处理文件,我们可以使用它来修改文件的内容。
例如
Testing.txt 文件包含一行 Description=MAN_Human 更改为 Description=MAN_Human_V2
仅在 MAN 末尾添加 (_V2)
因此,当我们打开文件时,我们只有描述名称 MAN_Human_V2 而不是 MAN。
我有多个文件要处理。请帮忙。
您可以通过使用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
像以前一样处理。
您可以下载sed
(一个 unix 实用程序 - google sed windows
)
sed -i 's/Description=MAN_Human/Description=MAN_Human_V2/' test.txt
-i
就地方式,即将结果写回同一个文件(而不是在屏幕上显示)。第二个参数表示s
ubstitute ... to ...,其余的是要执行此操作的文件(列表)。谷歌man sed
了解更多信息