【问题标题】:Renaming a *txt file based on the content of the *txt file根据 *txt 文件的内容重命名 *txt 文件
【发布时间】:2018-01-11 08:39:49
【问题描述】:

我已经阅读了所有类似的问题并尝试使用它来制作批处理脚本,但没有成功。

我有几个 *txt 文件,其中包含文件中的信息,这些信息应该存储在文件名中。

例如下面的*txt,我想将第一行的日期(20171115)和文件后面的数字(905707)存储在文件名中。

在这种情况下,文件名应该是“20171115_BOM_905707.txt”

谁能帮帮我?

【问题讨论】:

  • 你真正坚持的是什么?获取文件列表、从文件中读取文本、解析文本或重命名文件?而且您已经应用了标签“批处理文件” - 这是一个要求吗?
  • For /?,它做了很多事情,一个是逐行处理文本文件。
  • 我有一个构建脚本(.bat 文件),它结合了几个文件并根据当前日期和静态描述重命名它们(它也有效)。但这还不够好。要求我进入文件并读取内容并将其带回文件名。
  • 帮助意味着你自己尝试了一些东西,所以请分享你的努力并准确描述你卡在哪里!请阅读tour并学习How to Ask

标签: batch-file


【解决方案1】:

未测试。

setlocal enableDelayedExpansion
set "dir_with_files=C:\files"
for %%# in ("%dir_with_files%\*") do (
  set "date_="
  set "number="
  for /f "usebackq skip=1 tokens=3,4,5,6 delims=. " %%a in ("%%#") do (
     if not defined date_ (
      set "date_=%%a%%b%%c"
      set "number=%%d"
     )
  )
  ren "%%~f#" "!date_!_BOM_!number!%%~x#"
)
endlocal

【讨论】:

  • 次优解决方案,当只需要第一行时,您的脚本正在读取全文文件。
  • 完美运行!谢谢
  • 此脚本的其他问题。在合并*txt文件的过程中,我已经给文件指定了一个特定的名称(例如“X_BOM_X)。脚本可以只取这样命名的文件吗?
  • @Jake - 是的。在第一个 for lool - for %%# in ("%dir_with_files%\*") 你可以使用任何你想要的过滤器 - 例如for %%# in ("%dir_with_files%\*_BOM_*")
  • @PA。 - 取决于文件有多大。调用像FINDMORE这样的非内部命令也会降低性能。同样gotocall会解析整个脚本。如果文件只有6行长(假设从提供的屏幕截图) 可能这样会更快
猜你喜欢
  • 2021-08-02
  • 1970-01-01
  • 1970-01-01
  • 2012-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-15
  • 1970-01-01
相关资源
最近更新 更多