我尝试制作一个批处理文件,以使用具有相同名称的* .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
这是一个没有用的示例,我不明白为什么。
该代码有什么问题?
答案 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 /?