【问题标题】:the variable in "for" returns null after gets the right value--setting a windows batch file variable to the day of the week in for"for" 中的变量在获得正确的值后返回 null -- 将 Windows 批处理文件变量设置为 for 中的星期几
【发布时间】:2021-08-22 02:38:12
【问题描述】:

我有一个每天运行的 Windows 批处理文件。希望创建一个具有确切格式名称的文件夹。 我想在文件夹名称中显示工作日,然后出现了一些棘手的问题:

E:\tricks>for /F "skip=1" %a IN ('WMIC Path Win32_LocalTime Get DayOfWeek') do set var=%a

E:\tricks>set var=5

 :\tricks>set var=

E:\tricks>set /p b=Name:
Name:

变量“var”似乎已经获得了值“5”,这意味着“星期五”,但变量“var”再次变为“null”。有人可以帮我吗?非常感谢!

代码如下:

for /f "skip=1" %%a IN ('WMIC Path Win32_LocalTime Get DayOfWeek' ) do (set var=%%a)

set /p b=Name:
set mydt=(!)%DATE:~,10%("%var%")《" %b%"》
md %mydt:/=-%

【问题讨论】:

  • 不要使用文本图片的链接,将输出作为纯文本放入帖子中
  • 处理“丑陋”wmic 输出的方法有很多。在这种特定情况下,只需... do set /a var=%%a 即可(带有附加行的错误消息可以使用2>nul 重定向)。
  • 为什么要使用 Win32_LocalTime 来检索 DayOfWeek,然后使用不太可靠的替代方法来检索 yyyy、MM 和 dd 值。这些值已经可以从同一个 WMI 命令中检索到!您还确定字符 可以用于代码页吗?为什么在 %mydt% 的值中包含双引号,这些不是 Windows 目录名称中的有效字符?
  • @jeb:谢谢,这是我关于stackoverflow的第一个问题,以后会小心的;
  • @Stephan:非常简单实用的方法,谢谢Stephan!

标签: batch-file variables set dayofweek


【解决方案1】:

你观察 for 循环的输出,当你看到两个赋值时,然后 FOR 循环两次,因为 wmic 命令的输出有一个特殊的行结束。

您可以通过在第一次赋值后中断循环来修复它。

for /f "skip=1" %%a IN ('WMIC Path Win32_LocalTime Get DayOfWeek' ) do (
    set var=%%a
    goto :break
)
:break

【讨论】:

    猜你喜欢
    • 2012-07-07
    • 1970-01-01
    • 2016-04-14
    • 2021-11-04
    • 2013-08-08
    • 1970-01-01
    • 1970-01-01
    • 2015-08-09
    • 1970-01-01
    相关资源
    最近更新 更多