Неисправность установки переменной пакета для вывода команды - PullRequest
0 голосов
/ 13 декабря 2018

У меня есть следующая строка в попытке .BAT файла получить строку UTC.

FOR /F "tokens=*" %g IN ('powershell -command "Get-Date -date (Get-Date).ToUniversalTime()-uformat %Y-%m-%dT%H_%M_%SZ"') do (SET VAR=%g)

, которая использует эту строку PowerShell, которая работает из командной строки.

powershell -command "Get-Date -date (Get-Date).ToUniversalTime()-uformat %Y-%m-%dT%H_%M_%SZ"

И я получаю сообщение об ошибке.

Y-dTM_g) was unexpected at this time.

Это часть более широкого пакетного файла, поэтому я не могу просто сделать это непосредственно в скрипте PowerShell.

Я получил первоначальное вдохновениеотсюда.

Как настроить вывод команд в виде переменной в командном файле

Обновление:

Попробовал этот кодбезрезультатно.

test.bat

FOR /F "tokens=*" %%g IN ('powershell -command "Get-Date -date (Get-Date).ToUniversalTime()-uformat %Y-%m-%dT%H_%M_%SZ"') do (
    SET "VAR=%%g"
)

echo %VAR%

Получение выходных данных.

D:\foo>FOR /F "tokens=*" %g IN ('powershell -command "Get-Date -date (Get-Date).ToUniversalTime()-uformat m-H_SZ"') do (SET "VAR=%g" )

D:\foo>(SET "VAR=m-H_SZ" )

D:\foo>echo m-H_SZ
m-H_SZ

D:\foo>

1 Ответ

0 голосов
/ 13 декабря 2018

Использование кода внутри пакета потребляет первое %, поэтому вам нужно удвоить его.Просто попробуйте это:

FOR /F "tokens=*" %%g IN ('powershell -command "Get-Date -date (Get-Date).ToUniversalTime()-uformat %%Y-%%m-%%dT%%H_%%M_%%SZ"') do SET "VAR=%%g"

Также полезно всегда заключать в переменные set двойные кавычки, чтобы исключить любые возможные пробелы.

Исходный код будет работать только при запуске из cmd терминал.

Если вы устанавливаете переменные внутри цикла, вам, однако, потребуется delayedexpansion:

@echo off
setlocal enabledelayedexpansion
FOR /F "tokens=*" %%g IN ('powershell -command "Get-Date -date (Get-Date).ToUniversalTime()-uformat %%Y-%%m-%%dT%%H_%%M_%%SZ"') do (
    SET "VAR=%%g"
)
echo !VAR!

, чтобы узнать больше о задержанном расширении, см. cmd.exe:

set /?
setlocal /?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...