У меня есть команда powershell, которая работает очень хорошо, возвращая нужную мне дату в нужном мне формате. Мне не удалось вызвать эту команду в командном файле для использования в отдельном сценарии.

C:\Users\xxx> powershell -command (get-date ((get-date) .addDays (-1)) -uformat "% Y% m% d") 20171115

Это, кажется, работает, хотя формат даты не то, что я хотел бы, чтобы это было:

set "psCommand=powershell -command "(get-date((get-date).addDays(-1)))""
for /f "delims=" %%I in ('%psCommand%') do set "leaf=%%I"
echo %leaf% >> uploadsp.txt

Выходные данные: среда, 15 ноября 2017 г., 17:19:34

Спасибо

Так что я, возможно, опередил себя. Это то, что я имел ранее, и я просто пытался изменить это, чтобы получить дату-1.

echo @echo off > uploadsp.txt
set mydate=%date:~10,4%%date:~4,2%%date:~7,2%
echo set mydate=%date:~10,4%%date:~4,2%%date:~7,2% >> uploadsp.txt

set myfile=Epic_DSH360144_Drug_Utilization_%mydate%_DU.txt
echo put %myfile% >> uploadsp.txt
exit

2 ответа2

0

Что касается всей помощи, полученной здесь, логика ниже, казалось, хорошо работала для моих конкретных потребностей:

For /F "delims=" %%G In ('PowerShell -Command "&{((Get-Date).AddDays(-1)).ToString('yyyyMMdd')}"') Do Set "yesterday=%%G"    
For /F "delims=" %%Y In ('PowerShell -Command "&{((Get-Date).AddDays(-2)).ToString('yyyyMMdd')}"') Do Set "daybefore=%%Y"
0

Мне удалось заставить это работать так, как вы ожидаете, как вы описали, путем передачи логики скрипта PowerShell в пакетном скрипте во временный файл PS1 , а затем с помощью цикла FOR /F, чтобы взять результат выполненного скрипта PowerShell, чтобы вычесть число дней с текущей даты в нем, и сохраните этот результат как переменную для последующего использования в пакетном скрипте для своих нужд (%leaf%).

Обратите внимание, что мне пришлось удвоить знаки процента в PowerShell -format "%%Y%%m%%d" чтобы эти символы использовались в качестве буквенных символов, а не специальных символов в пакетном сценарии.

Уходящие проценты

Символ% имеет особое значение для параметров командной строки и параметров FOR.

Чтобы рассматривать процент как обычный символ, удвойте его:

%%

Escape-символы, разделители и цитаты


Пакетный скрипт

@ECHO ON

:DynamicPSScriptBuild
SET PSScript=%temp%\~tmp%~n0.ps1
IF EXIST "%PSScript%" DEL /Q /F "%PSScript%"
ECHO get-date((get-date).addDays(-1)) -uformat "%%Y%%m%%d">>"%PSScript%"

FOR /F "DELIMS=" %%I IN ('Powershell -ExecutionPolicy Bypass -Command "& '%PSScript%'"') DO SET "leaf=%%I"
echo %leaf% >> uploadsp.txt
EXIT

Дополнительные ресурсы

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .