从文本文件中的 1 行设置多个变量

Posted

技术标签:

【中文标题】从文本文件中的 1 行设置多个变量【英文标题】:Setting multiple variables from 1 line in text file 【发布时间】:2020-06-17 16:15:23 【问题描述】:

我正在使用 sqlcmd 将 3 个日期导出到临时文件,所有 3 个日期都在一行中,我需要将它们分开 它们的格式分别为[YYYY-MM-DD HH:MM:SS.000],因此文本文件中的行如下所示:

[YYYY-MM-DD HH:MM:SS.000] [YYYY-MM-DD HH:MM:SS.000] [YYYY-MM-DD HH:MM:SS.000]
set /p date=< %tmp%
setlocal enabledelayedexpansion
set st=%date%
set d1=!st:~0,19!
set d2=!st:~24,43!
set d3=!st:~48,67!

echo Date1 [%d1%]
echo Date2 [%d2%]
echo Date3 [%d3%]
setlocal disabledelayedexpansion

当我运行它时,它应该为每个日期输出[YYYY-MM-DD HH:MM:SS],这适用于第一个日期。

第二个日期输出为[YYYY-MM-DD HH:MM:SS.000 YYYY-MM-DD HH:MM:SS.000],第一个为第二个日期,第二个为第三个日期。

输出第三个日期是[YYYY-MM-DD HH:MM:SS.000],添加.000,即使字符计数在几秒后结束。

【问题讨论】:

使用保留变量%tmp% 是个坏主意。打开cmd 并输入echo %tmp% 你就会明白为什么了。不管怎样,给我看那个日期文件怎么样。我猜不出当前的格式。 2020-01-20 12:00:01.000 2020-01-16 10:41:02.000 2020-01-18 16:49:05.000 这就是日期格式,我设置了 %tmp%在文件的前面,所以它不是默认值。 " 我在文件的前面设置了 %tmp%,所以它不是默认值。" 是的,我知道,但%tmp% 是一个保留 b> 窗口变量。打开cmd 输入echo %tmp%,你就会明白我的意思。而是使用set mytmp,然后使用%mytmp%,但不要使用%tmp% 【参考方案1】:

使用您现在使用的相同文件,但将变量更改为 %mytmp%,因为 %tmp% 是保留的系统变量:

@echo off
set "mytmp=C:\path to temp\file.txt"
for /f "usebackq tokens=1,3,5" %%a in ("%mytmp%") do echo %%a %%b %%c

要像在示例中一样使用它们(无需设置变量):

@echo off
set "mytmp=C:\path to temp\file.txt"
for /f "usebackq tokens=1,3,5" %%a in ("%mytmp%") do (
    echo Date1 [%%a]
    echo Date2 [%%b]
    echo Date3 [%%c]
)

【讨论】:

如果您使用%%~Na%%~Nb%%~Nc,则每个日期中的.000 部分将自动删除... 谢谢@Aacini。我会将其添加为更新。老实说,我应该要求 OP 澄清他是否只想要日期或日期和时间,不包括 .000,因为代码似乎引用了日期和时间,但变量引用了日期。

以上是关于从文本文件中的 1 行设置多个变量的主要内容,如果未能解决你的问题,请参考以下文章

如何从 C++ 中的文本文件中逐行读取整数? [复制]

CMD/Batch 从变量中提取每个文本文件行并循环

从多个文件中删除多行文本

将文本文件中的特定行读取到批处理文件中的变量

如何用VBS逐行读取文本文件的内容,并输入变量

将命令行变量写入文本文件