微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

意外的Windows批处理行为 – 赋值后variables重置 – 在FILE和SET中使用FOR%f获取文件date

我试图比较一个文件的创builddate到今天的date,并有一个工作的解决scheme:

FOR %%f IN (%ARCHIVE_FILE%) DO SET FileDate=%%~tf IF [%FileDate:~0,-6%] == [%CURRENT_DATE%] goto finish

由于某种原因,在Windows机器上部署这个批处理脚本的时候(两台不同的Windows机器上),FileDatevariables被设置为预期的结果,例如“dd / mm / yy mm:ss” ,然后重置为空。

把:

echo %FileDate% pause

在两行之间显示FileDate被正确分配,然后直接分配给“”。 我无法find答案,并想知道是否有一些稀有的大师们可能对某些事情有所了解:/。

将参数从Windows批处理脚本传递到PowerShell脚本

如何在没有访问registry的情况下仅返回环境variables中的用户path?

Windows:获取和存储variables中的机器名称

在哪里设置path

C Linux stat()以nsec精度获取atime / mtime

谢谢你的帮助。

编辑:

移动到forfiles解决scheme,我将添加任何人寻找替代:

forfiles /p %ARCHIVE_DIR% /m %FILE_NAME% /d 0 && ( goto finish ) || ( goto start )

这应该就够了,我还没有在我需要的机器上检查它。

找出上述初始解决scheme为什么会失败,这还是很好的,哈哈。

使用Chef确保在Windows上删除用户环境variables,但不是系统variables

从Windows获取环境variables

哪些操作系统/平台实现等待变形优化?

在shell脚本中设置环境variables以在远程服务器上运行

在Windows上通过node.js执行git cmd失败,出错

我想你的代码和你发布的那个部分是不一样的。

这些类型的问题通常出现在由括号包围的命令块中。

这是批解析器的扩展阶段的一个问题,因为在执行块之前会发生百分比扩展。

所以你应该切换到延迟扩展

setlocal EnableDelayedExpansion FOR %%f IN (%ARCHIVE_FILE%) DO ( SET "FileDate=%%~tf" echo Doesn't work %FileDate% echo But this works !FileDate! IF "!FileDate:~0,-6!" == "%CURRENT_DATE%" goto finish ) :finish

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐