我需要创建一个批处理文件,我们可以使用它来修改文件的内容。
例如
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就地方式,即将结果写回同一个文件(而不是在屏幕上显示)。第二个参数表示substitute ... to ...,其余的是要执行此操作的文件(列表)。谷歌man sed了解更多信息