Сбой встроенных команд при использовании цикла for - PullRequest
0 голосов
/ 03 июля 2018

У меня есть часть скрипта, предназначенная для удаления «:» из времени и «/» из даты, возвращаемой командами time / t и date / t. Если я выполню команду в командной строке (cmd.exe), будут возвращены ожидаемые значения:

C: \ Windows \ system32> время / т
02:49
C: \ Windows \ system32> date / t
Вт 07/03/2018

Если я помещу те же команды в начале моего пакетного сценария, я получу ожидаемые результаты. Однако, если я помещу ту же команду в оператор for, чтобы разобрать «:» и «/». Я получаю следующие сообщения:

'date / t' не распознается как внутренняя или внешняя команда, работоспособная программа или командный файл. 'time / t' не распознается как внутренняя или внешняя команда, работающая программа или командный файл.

Запуск команды for вне командного файла работает нормально. Я заново создал пакетный файл, чтобы не было случайных нечетных символов.

Вот сам скрипт:

time /t
date /t

for /F "Tokens=2,3,4 delims=/ " %%a in ('date /t') Do Set _cdate=%%c%%a%%b
for /F "Tokens=1,2,3 delims=: " %%a in ('time /t') Do Set _ctime=%%a%%b%%c
pause

Этот же скрипт прекрасно работает как на другом сервере, так и на моем рабочем столе. Я в недоумении относительно того, что отличает этот новый сервер. (Помимо одного 32-битный) COMSPEC является правильным. (C: \ Windows \ system32 \ cmd.exe) Эти команды являются частью более крупного сценария, предоставляющего префикс имени файла для ведения журнала.

1 Ответ

0 голосов
/ 03 июля 2018

Вы можете попробовать этот пакетный скрипт, используя WMIC , чтобы получить дату и время, не зависящие от языковых / пользовательских настроек:

@echo off
Title Get Date and Time using WMIC
Call :Get_Date_Time 
echo Date : %Year%-%Month%-%day%
echo Time : %Hour%:%Min%:%Sec%
Pause>nul & Exit
::********************************************************************************************
:Get_Date_Time
for /f "skip=1" %%x in ('wmic os get localdatetime') do if not defined MyDate set "MyDate=%%x"
set "Year=%MyDate:~0,4%"
set "Month=%MyDate:~4,2%"
set "Day=%MyDate:~6,2%"
set "Hour=%MyDate:~8,2%"
set "Min=%MyDate:~10,2%"
set "Sec=%MyDate:~12,2%
exit /b
::********************************************************************************************
...