繁体   English   中英

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

[英]Batch file variable filenames: make timestamp filename within a for loop?

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

SETLOCAL ENABLEDELAYEDEXPANSION
for /f "delims=" %%a in (C:\Users\User\Desktop\Folder\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等。
演示当前文件输出的图像

如果有人知道如何修改它以达到正确的结果,我将不胜感激。

urls.txt 包含一个 URL 列表,每个都在一个新行中:

 https://www.bbc.co.uk/weather/2643743 https://www.bbc.com/mundo https://regex101.com/ https://www.bbc.co.uk/news

通过保持扩展而不按照您的意图退出循环。注意我在这里添加了毫秒超时,以确保我们每次都有不同的时间。 ping 127.0.0.1 -n 1 -w 500> nul

@echo off
setlocal enabledelayedexpansion
for /f "delims=" %%a in (%userprofile%\Desktop\Croud_DS_1\Lighthouse_Project\urls.txt) DO (
     set dte=!date:/=-!
     set tme=!time::=-!
     set tme=!tme:.=-!
     set tme=!tme:,=-!
     echo Line is: %%a
     lighthouse "%%a" --quiet --chrome-flags=" --headless" --output=json --output-path=%userprofile%\Desktop\Folder\Lighthouse_Project\json_logs\!dte!_!tme!.json
     ping 127.0.0.1 -n 1 -w 500> nul
)

请注意,我冒昧地添加了下划线以确保日期和时间格式可读,因此您将拥有YYYY-MM-dd_HH-mm-ss-ms

例子:

@Echo Off
SETLOCAL ENABLEDELAYEDEXPANSION
for /f "delims=" %%a in (C:\Users\Owner\Desktop\Folder\Lighthouse_Project\urls.txt) DO (
set dte=!DATE:/=-!
set tme=!TIME::=-!
set tme=!tme:.=-!
ECHO Line is: %%a
echo lighthouse "%%a" --quiet --chrome-flags="--headless" --output=json --output-path="C:\Users\Owner\Desktop\Folder\Lighthouse_Project\json_logs\!dte!!tme!.json"
Timeout 2 >NUL
)
Timeout -1 >NUL

这将使用您的urls.txt示例中的确切内容。 我在顶部添加了@Echo Off以减少屏幕混乱,并在您的lighthouse命令前面添加了一个echo ,以便它显示而不是运行。 此外,我还包括了几个timeout来模拟一个短时间跨度(因为命令正在echo 'ed not run) ,并让您有机会在最后阅读 output。

这是上面的 output 来证明我的情况:

Line is: https://www.bbc.co.uk/weather/2643743
lighthouse "https://www.bbc.co.uk/weather/2643743" --quiet --chrome-flags="--hea
dless" --output=json --output-path="C:\Users\Owner\Desktop\Folder\Lighthouse_Pro
ject\json_logs\08-10-201916-12-42-93.json"
Line is: https://www.bbc.com/mundo
lighthouse "https://www.bbc.com/mundo" --quiet --chrome-flags="--headless" --out
put=json --output-path="C:\Users\Owner\Desktop\Folder\Lighthouse_Project\json_lo
gs\08-10-201916-12-44-14.json"
Line is: https://regex101.com/
lighthouse "https://regex101.com/" --quiet --chrome-flags="--headless" --output=
json --output-path="C:\Users\Owner\Desktop\Folder\Lighthouse_Project\json_logs\0
8-10-201916-12-46-12.json"
Line is: https://www.bbc.co.uk/news
lighthouse "https://www.bbc.co.uk/news" --quiet --chrome-flags="--headless" --ou
tput=json --output-path="C:\Users\Owner\Desktop\Folder\Lighthouse_Project\json_l
ogs\08-10-201916-12-48-21.json"
Press any key to continue . . .

如最初所述,您的问题是在您的初始set语法中包含%字符,您可以从提供的 output 中看到。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM