【问题标题】:Setting multiple variables from 1 line in text file从文本文件中的 1 行设置多个变量
【发布时间】: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%

标签: string date datetime batch-file


【解决方案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,因为代码似乎引用了日期和时间,但变量引用了日期。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多