【问题标题】:Batch file to add a line to multiple .txt files in folders and subfolders批处理文件向文件夹和子文件夹中的多个 .txt 文件添加一行
【发布时间】:2019-05-31 07:51:30
【问题描述】:

批处理文件为文件夹和子文件夹中的多个 .txt 文件添加一行。

如果我将 (*.txt) 替换为 (specificname.txt),我有代码可以处理特定文件,但它只能在批处理文件所在的文件夹中使用

@echo off

set "$New_line=Your text"

for %%a in (*.txt) do (

   echo %$New_line% > "New_%%a"

   type "%%a" >> "New_%%a"

   del "%%a" 2>nul

  ren "New_%%a" "%%a"

)

我已经让它在批处理文件所在的文件夹中工作,但需要扩展以搜索子文件夹中的文件

预期结果将在文件夹和子文件夹中的 .txt 文件中添加行

【问题讨论】:

  • 好吧,恐怕你应该尝试一下这个任务,我们不是来为你写的,特别是因为你没有表现出任何尝试自己做的尝试。如果您首先打开一个命令提示符窗口,然后一个一个地输入您使用的每个命令,然后是一个空格、一个正斜杠和一个问号,您会走得更远。
  • for 有一个/R 开关...
  • '@echo off set "$New_line=Your text" for /R C:\folder\ %%a in (*.txt) do ( echo %$New_line% > "New_%%a" type "%%a" >> "New_%%a" del "%%a" 2>nul ren "New_%%a" "%%a" )' 只是删除每个文件夹和子文件夹中的所有文本文件跨度>
  • 不要在 cmets 中发布代码,edit 你的问题,然后将其插入那里!另请阅读:minimal reproducible example

标签: batch-file


【解决方案1】:

您的代码中有一些怪癖(取自您的评论):

ren 不支持目标部分中的路径 - 仅限 filename.ext。

使用for /r%%a 提供完整的限定文件名(驱动器、路径、名称、扩展名),因此_new%%a 导致无效的 FQFN(如 _New_C:\folder\subfolder\file.txt

您可以通过修饰符获取需要的子字符串(在for /?中解释)

小改进:
在任何路径或文件名周围加上引号
切换到 echo 命令的另一种重定向语法以避免尾随空格。

@echo off
set "$New_line=Your text"
for /R "C:\folder\" %%A in (*.txt) do (
  > "%%~dpANew_%%~nxA" echo %$New_line%
  type "%%A" >> "%%~dpANew_%%~nxA"
  del "%%A" 2>nul
  ren "%%~dpANew_%%~nxA" "%%~nxA"
)

【讨论】:

  • 谢谢斯蒂芬,这在文件的开头添加了一个新行,无论如何这可以在.txt 中已经存在的文本之后添加吗?抱歉,我显然是这方面的新手,但有兴趣了解更多信息。
  • 您的意思是在每个文本文件的第一行末尾附加一个固定字符串?
  • 我的意思是,保持 .txt 文件的内容不变,并在该 .txt 文件的内容末尾的新行上添加 $New_line=Your text" 字符串 - 而之前的代码将行放在内容之前
  • 嗯 - 就像交换 typeecho 命令?但这要容易得多:for /r "c:\folder\" %%A in (*.txt) do >>"%%A" echo %$New_line%。不需要临时文件 - 只需将该行附加到原始文件。
猜你喜欢
  • 2016-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多