如何根据存储在同名文本文件中的日期/时间重命名文件夹中的每个JPG文件?

时间:2018-08-02 05:39:48

标签: batch-file

我尝试制作一个批处理文件,以使用具有相同名称的* .txt文件的内容重命名文件夹中的每个* .jpg文件。

该文件夹大约包含100个JPEG文件和100个文本文件。
例如,名为001.txt的文本文件包含O53F 012C 01/13/2018 01:47:07,而我想将文件001.jpg重命名为01/13/2018 01:47:07.jpg

很难解释,我希望它足够清楚。

我试图在Stack Overflow上查找有关此任务的一些已经存在的问题,但是找不到与此问题相关的适当问题。我遇到的问题是合并 FOR 循环。

我不知道问题出在哪里。首先,我尝试仅重命名* .txt文件而不是* .jpg文件(这似乎更容易),但最终失败了。

@echo off

for %%f in (*.txt) do(
    for /f "tokens=7,8,9 delims= " %%i in (%%f) do(
        rename %%f %%i.txt
    )
)

pause

这是一个没有用的示例,我不明白为什么。

该代码有什么问题?

1 个答案:

答案 0 :(得分:0)

文件名中不能使用

/:,请参阅Microsoft关于Naming Files, Paths, and Namespaces的文章。我建议在文件名中使用日期/时间格式YYYY-MM-DD_hh-mm-ss

FOR 语法不正确,因为do(之间需要空格。

任务可以通过以下方式完成:

@echo off
for %%I in (*.txt) do for /F "usebackq tokens=3-8 delims=/: " %%A in ("%%I") do if not exist "%%C-%%A-%%B_%%D-%%E-%%F.jpg" ren "%%~nI.jpg" "%%C-%%A-%%B_%%D-%%E-%%F.jpg"
pause

也许最好看的是与上面的代码完全相同的代码:

@echo off
for %%I in (*.txt) do (
    for /F "usebackq tokens=3-8 delims=/: " %%A in ("%%I") do (
        if not exist "%%C-%%A-%%B_%%D-%%E-%%F.jpg" (
            ren "%%~nI.jpg" "%%C-%%A-%%B_%%D-%%E-%%F.jpg"
        )
    )
)
pause

(开头并以匹配)结尾的命令块仅应在确实需要时才使用,例如要执行多个命令以提高批处理文件处理的效率。

要了解所使用的命令及其工作方式,请打开命令提示符窗口,在其中执行以下命令,并非常仔细地阅读每个命令显示的所有帮助页面。

  • echo /?
  • for /?
  • if /?
  • pause /?
  • ren /?