Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 使用批处理文件修改文件内容_Batch File - Fatal编程技术网

Batch file 使用批处理文件修改文件内容

Batch file 使用批处理文件修改文件内容,batch-file,Batch File,我需要创建一个批处理文件,使用它我们可以修改文件的内容 比如说 Testing.txt文件包含一行 Description=人 改为 Description=manu Human\u V2 仅在MAN末尾添加(_V2) 因此,当我们打开文件时,我们的描述名为MAN_Human_V2,而不是MAN only 我有多个文件要处理。请提供帮助。您可以下载sed(unix实用程序-谷歌sed windows) -i表示就地,即将结果写回同一文件(而不是显示在屏幕上)。第二个参数是ssubstitute。

我需要创建一个批处理文件,使用它我们可以修改文件的内容

比如说

Testing.txt文件包含一行 Description=人 改为 Description=manu Human\u V2

仅在MAN末尾添加(_V2)

因此,当我们打开文件时,我们的描述名为MAN_Human_V2,而不是MAN only


我有多个文件要处理。请提供帮助。

您可以下载
sed
(unix实用程序-谷歌
sed windows


-i
表示就地,即将结果写回同一文件(而不是显示在屏幕上)。第二个参数是
s
substitute。。。到…,其余的是要执行此操作的(列表)文件。谷歌
man sed
有关更多信息,请下载
sed
(一个unix实用程序-谷歌
sed windows


-i
表示就地,即将结果写回同一文件(而不是显示在屏幕上)。第二个参数是
s
substitute。。。到…,其余的是要执行此操作的(列表)文件。谷歌
man sed
获取更多信息

您可以使用
for
循环在文件的每一行中移动,当您找到带有“描述”的行时,将“\u 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
文件时,必须将内容输出到新文件。然后用新创建的文件替换原始文件

编辑#1 您必须将TXT文件的内容完全复制到新文件中,然后才能将其中任何文件重新命名为原始名称。这是因为如果您立即重命名它们,那么
for
循环将在修改后再次拾取它们,并且其中一些将多次附加
\u V2

我没有在最后删除
.oldtxt
文件,因为在知道该过程有效之前,您不应该销毁原始文件

编辑#2
<> P>有一个解决方法,我会保存空白行。解决方法将文本文件的内容通过管道传输到
findstr
,搜索不包含
bogustring
的所有行。输出包括行号(唯一的方法是让它打印空白行)。行号后面有一个冒号(
),因此我们可以将输出分成不同的变量,在冒号上拆分内容。
tokens=1*
将行号拆分为
%%g
变量,行号的结果在
%%h
变量中。我们可以测试
%%h
以查看它是否为空,并在新文件中添加一个空行。否则,我们将像以前一样处理
%%h

您可以使用
for
循环遍历文件的每一行,当您找到带有“Description”的行时,将“\u 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
文件时,必须将内容输出到新文件。然后用新创建的文件替换原始文件

编辑#1 您必须将TXT文件的内容完全复制到新文件中,然后才能将其中任何文件重新命名为原始名称。这是因为如果您立即重命名它们,那么
for
循环将在修改后再次拾取它们,并且其中一些将多次附加
\u V2

我没有在最后删除
.oldtxt
文件,因为在知道该过程有效之前,您不应该销毁原始文件

编辑#2
<> P>有一个解决方法,我会保存空白行。解决方法将文本文件的内容通过管道传输到
findstr
,搜索不包含
bogustring
的所有行。输出包括行号(唯一的方法是让它打印空白行)。行号后面有一个冒号(
),因此我们可以将输出分成不同的变量,在冒号上拆分内容。
tokens=1*
将行号拆分为
%%g
变量,行号的结果在
%%h
变量中。我们可以测试
%%h
以查看它是否为空,并在新文件中添加一个空行。否则,我们会像以前一样处理
%%h

没有好的方法来回答这个问题。我们可以告诉您如何在文件末尾或行尾添加文本,或者如何解析文本并查找要替换为新文本的特定标记。。。但是,只要您没有指定确切的标准,这个问题就无法正确回答。嗨..只需要在描述中添加_v2name description=MAN_Human change to description=MAN_Human_V2请帮助处理批处理文件。请让我知道任何问题。看看这个:我已经看到了,但它没有用。说明名称不是所有文件的通用名称,因此“查找”和“替换”将不起作用。请帮助我没有好办法回答这个问题。我们可以告诉您如何在文件末尾或行尾添加文本,或者如何解析文本并查找要替换为新文本的特定标记。。。但是,只要您没有指定确切的标准,这个问题就无法正确回答。嗨..只需要在描述中添加_v2name description=MAN_Human change to description=MAN_Human_V2请帮助处理批处理文件。请让我知道任何问题。看看这个:我已经看到了,但它没有用。说明名称不是所有文件的通用名称,因此“查找”和“替换”将不起作用。请帮助我,实际上,这可以通过批处理文件来完成。请看我的答案。谢谢-删除了一行,上面说仅使用批处理文件是不可能的。实际上,仅使用批处理文件就可以做到这一点。请看我的答案。谢谢-删除了一行,上面说仅使用批处理文件是不可能的。仅供参考-如果您在将来投票,人们会更愿意帮助您