Для потомства я сделал что-то подобное zoul для приложений для iPhone, путем добавления revision.h к моему проекту, затем добавления следующего как фазы разработки Сценария Выполнения:
REV=`/usr/bin/svnversion -nc ${PROJECT_DIR} | /usr/bin/sed -e 's/^[^:]*://;s/[A-Za-z]//'`
echo "#define kRevisionNumber @\"$REV\"" > ${PROJECT_DIR}/revision.h
я сделал это для захвата простого числа пересмотра, в противоположность более подробной строке, которую svnversion производит в решении zoul.
Для приложений Mac, я основывал свой подход к это сообщение , и вместо этого создал buildnumber.xcconfig файл. При настройках сборки для цели я изменился На основе значения в нижнем правом углу диалогового окна к buildnumber.xcconfig. В Info.plist я отредактировал следующие строки:
CFBundleVersion
${BUILD_NUMBER}
CFBundleShortVersionString
Version 1.0
Так, чтобы мой О диалоговом окне отобразил бы строку версии, подобную Версии 1.0 (1234), где 1234 является числом пересмотра Подрывной деятельности. Наконец, я создал фазу разработки Сценария Выполнения со следующим кодом:
REV=`/usr/bin/svnversion -nc ${PROJECT_DIR} | /usr/bin/sed -e 's/^[^:]*://;s/[A-Za-z]//'`
echo "BUILD_NUMBER = $REV" > ${PROJECT_DIR}/buildnumber.xcconfig
Это не может быть самым чистым путем, поскольку он требует чистого цикла прежде, чем создать для нового пересмотра для утверждений в приложении, но он работает.
Я закончил с этим скриптом:
set hour=%time:~0,2%
if "%hour:~0,1%" == " " set hour=0%hour:~1,1%
echo hour=%hour%
set min=%time:~3,2%
if "%min:~0,1%" == " " set min=0%min:~1,1%
echo min=%min%
set secs=%time:~6,2%
if "%secs:~0,1%" == " " set secs=0%secs:~1,1%
echo secs=%secs%
set year=%date:~-4%
echo year=%year%
:: Например, на WIN2008R2 мне нужно было сделать ваш 'set month =% date: ~ 3,2%', как показано ниже :: в противном случае появится 00 для МЕСЯЦА
set month=%date:~4,2%
if "%month:~0,1%" == " " set month=0%month:~1,1%
echo month=%month%
set day=%date:~0,2%
if "%day:~0,1%" == " " set day=0%day:~1,1%
echo day=%day%
set datetimef=%year%%month%%day%_%hour%%min%%secs%
echo datetimef=%datetimef%
Смещение : форматирование длины
, поддерживаемое командой SET
в Windows, не позволит вам заполнить 0
, как вам кажется.
Однако вы можете закодировать ПАРТИЮ скрипт для проверки того, что час меньше 10
и
pad соответственно другой строкой echo
.
Вы найдете некоторую информацию о команде SET
по этой ссылке .
Вы также можете перейти на другие методы программирования, чтобы попасть сюда.
В unix bash (доступном с Cygwin в Windows) довольно просто сказать:
date +%Y_%m_%d__%H_%M_%S
И он всегда выполняет правильные вставки.
Следующее может не быть прямой ответ, но близкий?
set hour=%time:~0,2%
if "%hour:~0,1%" == " " set datetimef=%date:~-4%_%date:~3,2%_%date:~0,2%__0%time:~1,2%_%time:~3,2%_%time:~6,2%
else set datetimef=%date:~-4%_%date:~3,2%_%date:~0,2%__%time:~0,2%_%time:~3,2%_%time:~6,2%
По крайней мере, это может вдохновлять.
@ECHO OFF
: Sets the proper date and time stamp with 24Hr Time for log file naming
: convention
SET HOUR=%time:~0,2%
SET dtStamp9=%date:~-4%%date:~4,2%%date:~7,2%_0%time:~1,1%%time:~3,2%%time:~6,2%
SET dtStamp24=%date:~-4%%date:~4,2%%date:~7,2%_%time:~0,2%%time:~3,2%%time:~6,2%
if "%HOUR:~0,1%" == " " (SET dtStamp=%dtStamp9%) else (SET dtStamp=%dtStamp24%)
ECHO %dtStamp%
PAUSE
REM Assumes UK style date format for date environment variable (DD/MM/YYYY).
REM Assumes times before 10:00:00 (10am) displayed padded with a space instead of a zero.
REM If first character of time is a space (less than 1) then set DATETIME to:
REM YYYY-MM-DD-0h-mm-ss
REM Otherwise, set DATETIME to:
REM YYYY-MM-DD-HH-mm-ss
REM Year, month, day format provides better filename sorting (otherwise, days grouped
REM together when sorted alphabetically).
IF "%time:~0,1%" LSS "1" (
SET DATETIME=%date:~6,4%-%date:~3,2%-%date:~0,2%-0%time:~1,1%-%time:~3,2%-%time:~6,2%
) ELSE (
SET DATETIME=%date:~6,4%-%date:~3,2%-%date:~0,2%-%time:~0,2%-%time:~3,2%-%time:~6,2%
)
ECHO %DATETIME%
Как было отмечено, разбор даты и времени полезен только в том случае, если вы знаете формат, используемый текущим пользователем (например, MM/dd/yy или dd-MM-yyy, просто чтобы назвать два). Это можно определить, но после того, как вы сделаете все подчеркивания и разборы, вы все равно окажетесь в ситуации, когда используется неожиданный формат, и потребуется больше настроек.
Вы также можете использовать какую-нибудь внешнюю программу, которая будет возвращать строку даты в предпочитаемом вами формате, но это имеет недостатки, связанные с необходимостью распространять утилиту вместе с вашим скриптом/пакетом.
Существуют также пакетные трюки, использующие часы CMOS в довольно грубом виде, но это слишком близко к оголенным проводам для большинства людей, а также не всегда предпочтительное место для получения даты/времени.
Ниже представлено решение, которое позволяет избежать вышеуказанных проблем. Да, оно создает некоторые другие проблемы, но для моих целей я нашел это самое простое, понятное и портативное решение для создания метки даты в .bat-файлах для современных систем Windows. Это просто пример, но я думаю, вы поймете, как изменить его для других форматов даты и/или времени и т.д.
reg copy "HKCU\Control Panel\International" "HKCU\Control Panel\International-Temp" /f
reg add "HKCU\Control Panel\International" /v sShortDate /d "yyMMdd" /f
@REM reg query "HKCU\Control Panel\International" /v sShortDate
set LogDate=%date%
reg copy "HKCU\Control Panel\International-Temp" "HKCU\Control Panel\International" /f