【问题标题】:Windows command line renaming files in subfolders?Windows命令行重命名子文件夹中的文件?
【发布时间】:2019-07-21 17:36:34
【问题描述】:

目前没有找到类似的问题,所以我试着解释一下这个问题:

我有大量文件位于"C:\images" 内的子文件夹中 我在两列中有一个名称列表,因此第一列是旧文件名,第二列是新文件名。我想将该列表更改为批处理文件。 名称非常独特,所以我想制作批处理文件 - 这将是每个要重命名的文件的命令。

RENAME "C:\images\768e11ab.jpg" "4ca5d042.jpg"
RENAME "C:\images\5402c708.jpg" "b802820b.jpg"
RENAME "C:\images\1c039e0e.jpg" "80ce9797.jpg"
etc...

这很简单,只是文件分散在子文件夹中。有什么方法可以创建命令,以便在"C:\images" 的所有子文件夹中查找该特定文件并重命名它。 以下一些类似的问题尝试了这个,没有结果:

for /r "C:\images\" "%%~G" (768e11ab.jpg) do "4ca5d042.jpg"

另外,尝试为此使用一些重命名应用程序,但是当我尝试重命名大文件列表时它们会冻结,所以我会避免它们并使用批处理文件。另外,我想使用这种方式,在每个文件的批处理文件中有一行,因为我使用它更简单(稍后再更改)。感谢您的帮助。

【问题讨论】:

  • 所以你有不同的子文件夹中的文件;你有文件名,但没有它们的位置。正确的? (只是想澄清一下,因为你的代码和你的文字不同意)
  • 您的列表文件是什么样的?列是如何分开的?你的大数字的规模是多少?您可以从列表中构建查找表,迭代文件,如果表中有条目,则重命名文件。
  • 要了解如何使用命令,请打开命令提示符窗口并输入 command /?。例如,要查看for 命令的使用信息,请使用for /?

标签: batch-file cmd batch-rename


【解决方案1】:

从另一面解决问题。不是循环遍历图像文件,而是遍历文本文件。

假设您的文本文件类似于

"768e11ab.jpg" "4ca5d042.jpg"
"5402c708.jpg" "b802820b.jpg"
"1c039e0e.jpg" "80ce9797.jpg"

那么代码可能如下所示:

@echo off
REM read each line; %%A is the first column, %%B is the second one
for /f "tokens=1,2" %%A in (list.txt) do (
  REM search the image file %%A
  for /R "C:\Images\" %%C in ("%%~A") do (
    REM %%C now holds the full path of %%A
    ECHO ren "%%~C" "%%B~%%~xC"
  )
)

如果您的列表看起来不同,则必须调整 for /f 循环的标记和分隔符。

注意:出于安全原因,ren 命令只是回显。一旦你确认它完全符合你的要求,删除 ECHO 以启用 * ren` 命令。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-02
    • 1970-01-01
    • 2015-12-03
    • 2020-11-22
    • 2012-01-02
    • 2018-04-07
    • 1970-01-01
    相关资源
    最近更新 更多