Как создать пользовательскую переменную среды, которая * вызывает *% date% или% time% каждый раз, когда она вызывается? - PullRequest
2 голосов
/ 07 апреля 2011

Я пытаюсь создать 2 переменные среды пользователя со следующим определением:

datel=%date:~-4%%date:~3,2%%date:~0,2%
datetime=%date:~-4%%date:~3,2%%date:~0,2%-%time:~0,2%_%time:~3,2%_%time:~6,2%

чтобы каждый раз звонить:

echo %datel%
echo %datetime%

Я получаю:

20110407
20110407-11_45_45

Я могу без проблем определить пользовательские переменные среды в графическом интерфейсе (Компьютер -> (Правый клик) Свойства-> Расширенные настройки системы-> Переменные среды), и когда я делаю «набор» в новом окне cmd, я получаю следующим образом:

>set da  
datel=%date:~-4%%date:~3,2%%date:~0,2%
datetime=%date:~-4%%date:~3,2%%date:~0,2%-%time:~0,2%_%time:~3,2%_%time:~6,2%

Но тогда «повторение» их не то, что я ожидал:

C:\Users\jaravj
>echo %datel%
%date:~-4%%date:~3,2%%date:~0,2%

C:\Users\jaravj
>echo %datetime%
%date:~-4%%date:~3,2%%date:~0,2%-%time:~0,2%_%time:~3,2%_%time:~6,2%

Заранее огромное спасибо.

Ответы [ 2 ]

2 голосов
/ 07 апреля 2011

Или используйте отложенное расширение, тогда вы сможете развернуть два раза в одну строку.

setlocal
set "datel=!date:~-4!!date:~3,2!!date:~0,2!"
setlocal EnableDelayedExpansion
echo %datel%

Это работает, потому что сначала анализатор пакетной строки расширяет %datel% до !date:~-4!!date:~3,2!!date:~0,2! и после всегоПроцент расширения сделаны.

Затем обрабатываются escape-символы, а затем, когда расширяется синтаксический анализатор на последнем этапе, расширяются восклицательные знаки.

Объясняется в , как сценарии синтаксического анализа cmd.exe

2 голосов
/ 07 апреля 2011

Используйте call echo %datel%, что приводит к другому проходу синтаксического анализа (который вам нужен здесь).echo само по себе не расширяет никакие переменные окружения, которые делает оболочка при разборе строки.Поэтому вам нужно заставить это.

Это недокументировано, однако, так что возьмите это с крошкой соли.Более надежный (то есть реально поддерживаемый) вариант может заключаться в использовании подпрограммы:

:expand
  echo.%*
goto :eof

и последующем вызове с помощью

call :expand echo %datel%
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...