如何在批处理文件中的同一行上设置多个因变量?

问题描述 投票:3回答:4

这是受another post on Arqade的启发,关于如何使用批处理脚本备份一些文件。

以下块使用当前日期/时间字符串创建变量:

REM -- Get the current date/time stamp
set DS=%date%
set TS=%time: =0%
set mm=%DS:~4,2%
set dd=%DS:~7,2%
set yyyy=%DS:~10,4%
set hh=%TS:~0,2%
set min=%TS:~3,2%
set ss=%TS:~6,2%
set ms=%TS:~9,2%
set DT_STAMP=%yyyy%-%mm%-%dd%_%hh%.%min%.%ss%

作为脚本编写者,将这些内容合并为一行通常很方便。然而,在这种情况下,如果不是不可能的话,将其冷凝成单线是非常困难的。

似乎没有办法将多个set命令放在一行上。使用&&&分离命令工作正常,但右侧的命令不能依赖于先前在同一行上设置的变量。

另外,请注意time变量必须如何将spaces替换为零0。似乎没有办法同时执行字符串替换并在同一行上获取子字符串。

有没有办法把它降到一条线?我能得到的最接近的是两条线:

set DS=%date% && set TS=%time: =0%
set DT_STAMP=%DS:~10,4%-%DS:~4,2%-%DS:~7,2%_%TS:~0,2%.%TS:~3,2%.%TS:~6,2%

Update

这已经收集了一些好的答案;请允许我澄清接受的答案必须具备的内容:

  • 一个丑陋但可重复使用的单线解决方案是可以的(上面已经提供了漂亮的版本)
  • 仅标准shell命令(必须避免使用PowerShell和类似命令;如果我想要那些,我只需要在PowerShell中执行所有操作)
  • 能够以任何逻辑格式格式化日期(应该能够执行以上漂亮版本可以执行的任何操作,而不仅仅是使用简写符号支持ISO格式的日期)
  • 可以忽略本地化设置(实际上,这只是一次!)
  • 必须在一条线上! (例如,delayed expansion很方便,但可能有令人讨厌的副作用,不能在每种情况下重复使用,通常需要多行)
windows batch-file cmd command-prompt
4个回答
© www.soinside.com 2019 - 2024. All rights reserved.