如果问题标题有点令人困惑,我深感抱歉,但我想简短一点。
基本上,我想要做的是采用系统日期格式(%DATE%)并替换命令中不正确或文件名中非法的字符;例如空格和斜杠。
但是,我执行此操作的环境是有限的。这是通过一个在客户端机器上执行一行命令的服务运行的。这意味着我无法使用变量(据我所知)分多个步骤执行此操作,因为我尝试过的所有方法都无法看到在同一行上创建的变量(当使用 & 和 && 将命令链接在一起时)。批处理文件也几乎不可能,因为让一些客户将批处理文件放到他们的系统上可能很困难。
现在,我已设置如下命令:
MOVE C:\folder\file.csv C:\archive\^"file%DATE:/=-%.csv^"
我想知道是否有某种方法可以在 %DATE:/=-% 部分进行多个字符替换。
目前,引号正在修复格式中的空格问题,我正在用破折号替换斜线。我希望这足以修复任何问题,因为我不知道为什么他们的日期格式中会有其他非法字符,但我想我会要求做好准备,以防我们将来再遇到问题。如果有任何可能令人困惑的地方,请随时要求澄清。
答案1
首先,在“纯”cmd 中,日期本身就很难,因为输出取决于短日期格式。这意味着您可能将其输出为dd/mm/yyyy
; yyyy-dd-mm
;mm dd yy
等。通常我建议使用 powershell 或 wmic,但在您的情况下它们可能不行,所以有两个技巧可能对您有帮助:
a) 在同一行设置和读取变量,使用 call* - 注意a
必须在执行前取消设置才能使其正常工作:
set "a=10" & call echo %a%
b) 要删除几个可能的分隔符(但只能删除单个分隔符,并且您必须知道有多少个),您可以使用for /f
:
for /f "tokens=1-3 delims=-/" %F in ("%DATE%") do echo %F%G%H
*(注意:如果您可以控制 cmd 的启动方式,则使用cmd /v:on
可以启用所谓的延迟扩展,因此您可以使用set "a=10" & echo !a!
)