从文本文件中的 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 行设置多个变量的主要内容,如果未能解决你的问题,请参考以下文章