【问题标题】:How to rename lines of files according to text in different file?如何根据不同文件中的文本重命名文件行?
【发布时间】:2019-02-01 16:23:02
【问题描述】:

我有多个文件,如 test1.html、test2.html ... testn.html 等等,在同一个文件夹中,我有 names.txt 和所有文件test{n}.html 文件的名称。 如何遍历 names.txt 文件并根据其中的行重命名所有 html 文件?

names.txt 结构如:

randomName 
NameRandom 
test 
Name
...

【问题讨论】:

  • names.txt的格式是什么?
  • 已经更新
  • randomName 应该是test1.html 的名称,而NameRandomtest2.html 的名称?
  • 是的,没错
  • 所以,要明确一点,您想将randomName.html 重命名为NameRandom.html 并将test.html 重命名为Name.html,对吗?还是要将名称以test 开头并后跟一个或多个数字的所有.html 文件重命名为names.txt 中列出的每个名称?如果是后者,您是否保证列出的文件数量与目录中存在的文件数量相同?

标签: batch-file batch-rename


【解决方案1】:

您需要结合使用FORSET /a 来完成此操作。您实际上会在读取 names.txt 文件的 FOR 循环中使用 SET /a 递增计数器,并根据计数器值和行条目重命名文件。

setlocal enableDelayedExpansion
SET counter=0
FOR /F "usebackq tokens=* delims=" %%f IN (names.txt) DO (
  SET /a counter=!counter!+1
  ECHO.N:!counter!
  REN "test!counter!.html" "%%f.html"
)

要在循环中执行变量操作,您还需要启用延迟扩展 (setlocal enableDelayedExpansion)。

【讨论】:

  • 只有一个小问题:递增不起作用
  • 修改为添加延迟扩展
  • 如果答案能解决您的问题,请务必投票
  • 我不会使用tokens=*usebackq。你明白你写什么吗? OP 可能需要以空格开头的文件名(这是我完全不同意的)。还有一些其他小的改进可以使您的代码更好。请参阅下面的答案(稍后会发布)。
  • re tokens=*,他只提供了模拟信息,所以虽然数据中似乎还没有空格,但这并不意味着不会有。我个人在大多数文件名中都使用空格,所以假设会有空格。
【解决方案2】:

你可以使用:

@echo off
setlocal EnableDelayedExpansion

set "testn=0"
set "extension=html"

for /F "delims=" %%A IN (names.txt) do (
    set /a "testn+=1"
    if exist test!testn!.%extension% (
        echo Processing test!testn!.%extension%
        rename "test!testn!.%extension%" "%%A.%extension%"
    ) else (
        call:finish
    )
)
goto:finish

:finish
echo Finished renaming^^!
pause
exit /b

除了其他答案之外,这将稍微如果文件包含比test*.html文件更多的行。

扩展是可变的/自定义的。

【讨论】:

  • 在您的重命名操作中,您需要删除“.”或者额外的句点会将文件命名为“input..html”而不是“input.html”。
  • @shawn 这是一个错字,现在已修复。
  • 这个双循环还会导致每个后续文件的错误数量不断增加,因为它成功使用下一个文件名的唯一方法是在尝试使用初始文件名系列时出错FOR 循环。 test3.html 在被命名为 test.html 之前会有 2 个重命名错误,而 test999.html 在被重命名之前会有 998 个错误。这假定实际上没有文件被重命名为以前的“test#.html”,这将无法使用正确的新名称。
  • 我看到的唯一警告是,如果有人删除了组中间的文件。如果有 12 个输入文件并且数字 7 被删除,它将保持 test8 到 test12 不变。
猜你喜欢
  • 1970-01-01
  • 2011-12-06
  • 2017-12-23
  • 2015-02-01
  • 1970-01-01
  • 2022-09-25
  • 1970-01-01
  • 2018-12-28
  • 1970-01-01
相关资源
最近更新 更多