Переименуйте файл .exe, добавив системное время, используя файл nmake. - PullRequest
0 голосов
/ 06 февраля 2019

Я хочу переименовать файл .exe с системным временем / местным временем, внеся изменения в файл nmake.Кто-нибудь может предложить книги или ссылки на команды nmake?Ссылка на странице Microsoft не охватывает то, что я ищу ...

1 Ответ

0 голосов
/ 08 февраля 2019

Будет работать следующий make-файл:

# 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% во временном файле, а затем устанавливает макрос nmake в значение первой строки этого файла, используя !include.Затем двоеточия заменяются на «+» или на все, что вы хотите.

По вопросам, связанным с этим, см. Имена макрокоманд .

.а именно, как найти «книги или ссылки на команды nmake?», см. мой ответ на Подстановочный знак для файлов в подкаталоге в NMAKE .


Обновление# 1: Мой оригинальный ответ работает, но на моем компьютере до 10 часов утра он создал имя файла с пробелом.Таким образом, ответ был обновлен, чтобы исправить это.(Возможно, лучший обходной путь - просто спать до 10 часов утра!)


Обновление № 2: Другой подход состоит в том, чтобы не использовать макросы nmake, а простоиспользовать переменные среды.Это короче.(Я был изначально введен в заблуждение выводом nmake.)

Но необходимость сделать две замены в %TIME%, одну для замены пробелов и другую для замены двоеточий, добавляет немногоосложнение.Вызов call необходим для задержки расширения переменной.

Следующий make-файл:

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
...