通过使用 nmake 文件附加系统时间来重命名 .exe 文件

Posted

技术标签:

【中文标题】通过使用 nmake 文件附加系统时间来重命名 .exe 文件【英文标题】:Rename the .exe file by appending system time using the nmake file 【发布时间】:2019-02-06 10:16:33 【问题描述】:

我想通过修改 nmake 文件来用系统时间/本地时间重命名 .exe 文件。有人可以推荐书籍或参考 nmake 命令吗?微软页面中提供的参考资料并未涵盖我正在寻找的内容......

【问题讨论】:

也许我误解了你的问题,或者我的回答不适合你的环境?如果您可以添加更多详细信息,这可能会有所帮助。谢谢。 【参考方案1】:

以下 makefile 将起作用:

# Create the macro DATE_TIME from the environment variables %DATE% and %TIME%
!if [echo %DATE%_%TIME% > date_time.tmp] == 0
DATE_TIME = \
!include date_time.tmp       # get macro value from first line of temporary file
DATE_TIME = $(DATE_TIME::=+) # replace colons with "+"
DATE_TIME = $(DATE_TIME: =0) # replace spaces with "0"
!if [del date_time.tmp]      # clean up temporary file
!endif
!endif

foo.exe: bar

foo.exe:
    @echo Info: Building target $@ from $**, because $? is newer (or non-existent)
    @type nul > $@
    copy $@ "$*_$(DATE_TIME).exe"

bar:

输出是:

>nmake -nologo
Info: Building target foo.exe from bar, because bar is newer (or non-existent)
        copy foo.exe "foo_07-Feb-2019_21+08+48.11.exe"
        1 file(s) copied.

解释:环境变量 %DATE% 和 %TIME% 的不寻常之处在于,它们的值每次都会发生变化;这似乎导致他们与nmake 的接口出现问题。作为一个小问题,%TIME% 包含冒号,它当然不能是文件名的一部分。另外一个问题是,%DATE% 和 %TIME% 的格式不固定:它们可以取决于用户选择的内容。

给定的解决方案在临时文件中捕获 %DATE% 和 %TIME% 的值,然后使用 !includenmake 宏设置为该文件第一行的值。然后将冒号替换为“+”,或者任何你想要的。

有关相关问题,请参阅Computed macro names。

根据您的第二个问题,即您如何找到“nmake 命令的书籍或参考资料?”,请参阅我对Wildcard for files in sub-directory in NMAKE 的回答。


更新 #1: 我的原始答案有效,但在上午 10 点之前在我的机器上创建了一个带有空格的文件名。因此,答案已更新以解决此问题。 (也许更好的解决办法就是睡到早上 10 点!)


更新 #2: 另一种方法是不使用 nmake 宏,而只使用环境变量。这更短。 (我最初被 nmake 打印输出误导了。)

但是需要在%TIME% 中进行两个 替换,一个替换空格,另一个替换冒号,这增加了一些复杂性。需要调用call 来延迟变量扩展。

以下makefile:

foo.exe: bar

foo.exe:
    @echo Info: Building target $@ from $**, because $? is newer (or non-existent)
    @type nul > $@
    call set XXX=%%DATE%%_%%TIME: =0%%& call copy $@ "$*_%%XXX::=+%%.exe"

bar:

给予:

>nmake -nologo
Info: Building target foo.exe from bar, because bar is newer (or non-existent)
        call set XXX=%DATE%_%TIME: =0%& call copy foo.exe "foo_%XXX::=+%.exe"
        1 file(s) copied.

与:

>dir /O-D
 Volume in drive C has no label.
 Volume Serial Number is xxxxxx

 Directory of C:xxxxxx

08-Feb-2019  08:19 AM    <DIR>          ..
08-Feb-2019  08:19 AM    <DIR>          .
08-Feb-2019  08:19 AM                 0 foo_08-Feb-2019_08+19+22.08.exe
08-Feb-2019  08:19 AM                 0 foo.exe
08-Feb-2019  08:18 AM               196 Makefile
               3 File(s)            196 bytes
               2 Dir(s)  12,517,236,736 bytes free

【讨论】:

根据您的第二个问题,即您到底是如何找到“nmake 命令的书籍或参考资料的?”,请参阅我对Wildcard for files in sub-directory in NMAKE 的回答。

以上是关于通过使用 nmake 文件附加系统时间来重命名 .exe 文件的主要内容,如果未能解决你的问题,请参考以下文章

如何通过在 Windows 中使用批处理替换子字符串来重命名文件 [关闭]

通过重新格式化现有文件名来重命名文件 - 与 -replace 运算符一起使用的替换字符串中的占位符

通过 facebook 登录会附加一些代码来重定向 url

为啥 C 程序员使用 typedef 来重命名基本类型?

将当前时间分配给powershell变量

powershell 通过从文件名中删除“&”来重命名目录中的文件。