批处理文件变量文件名:在for循环中创建时间戳文件名?

问题描述 投票:2回答:1

我正在尝试从命令行运行一批Lighthouse审核,并将结果输出到JSON文件。为确保它们不会相互覆盖,每个文件名都必须唯一。我想理想地使用时间戳作为文件名。我在类似主题上也经历过许多其他Stack问题,但我无法解决这个问题。我目前正在使用以下代码,将其编写在批处理文件中,并从Windows命令行调用:

SETLOCAL ENABLEDELAYEDEXPANSION
for /f "delims=" %%a in (C:\Users\Darce\Desktop\Croud_DS_1\Lighthouse_Project\urls.txt) DO (
set dte=!DATE:/=-%!
set tme=!TIME::=-%!
set tme=!%tme:.=-%!
ECHO Line is: %%a
lighthouse %%a --quiet --chrome-flags=" --headless" --output=json --output-path=C:\Users\User\Desktop\Folder\Lighthouse_Project\json_logs\!dte!!tme!.json
)

产生的第一个文件具有正确的名称,所有后续JSON的文字名称均为'!dte !! tme!',并相互覆盖。如果您在for循环外运行Lighthouse命令,它会完美执行,我知道变量不会在for循环内更新,但我认为!var!可以用来解决这个问题。 for循环遍历存储在urls.txt中的URL列表,依次审核每个URL并返回JSON文件。

当前结果:!dte !! tme!.json期望的结果:08-10-201913-55-12-07.json,08-10-201913-56-14-00.json等。

[如果有人知道如何对此进行修改以实现正确的结果,我将非常感谢。

谢谢!

windows batch-file cmd batch-processing batch-rename
1个回答
0
投票

看看这个例子:

@echo off
setlocal enabledelayedexpansion
    for /L %%i in (1,1,5) do (
        call :timer
        echo !myt!
        timeout 1
   )

:timer
set myt=%time%

如您所见,是否调用了新的计时器标签,每次都会更新。

所以对您来说这应该起作用:

@echo off
setlocal enabledelayedexpansion
for /f "delims=" %%a in (C:\Users\Darce\Desktop\Croud_DS_1\Lighthouse_Project\urls.txt) DO (
   call :timer
   ECHO Line is: %%a
lighthouse %%a --quiet --chrome-flags=" --headless" --output=json --output-path=C:\Users\User\Desktop\Folder\Lighthouse_Project\json_logs\!dte!_!tme!.json
)

:timer
 set dte=%date:/=-%
 set tme=%time::=-%
 set tme=%tme:.=-%
 set tme=%tme:,=-%
© www.soinside.com 2019 - 2024. All rights reserved.