Retorna o resultado do Comando PowerShell no arquivo em lote

0

Eu tenho um comando powershell que funciona muito bem em retornar a data que eu quero no formato que eu preciso. Eu tenho sido incapaz de chamar este comando em um arquivo em lotes para ser usado em um script separado.

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

Isso parece funcionar, embora o formato de data não seja o que eu gostaria que fosse:

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

Resultado: quarta-feira, 15 de novembro de 2017 17:19:34

Obrigado

Então eu posso ter me adiantado. Isso é o que eu tinha anteriormente e eu estava apenas tentando mudá-lo para obter data-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
    
por irshan syed 16.11.2017 / 23:22

2 respostas

0

Consegui que isso funcionasse conforme o esperado, conforme você descreve canalizando a lógica do script PowerShell dentro do script em lote para um arquivo temp PS1 e, em seguida, usando um FOR / F para obter o resultado do script PowerShell executado para subtrair o número de dias da data atual em e salve esse resultado como uma variável para usar no script em lote para suas necessidades ( %leaf% ) depois.

Observe que tive que dobrar os sinais de porcentagem no PowerShell -format "%%Y%%m%%d" para garantir que esses símbolos sejam usados como caracteres literais e não como caracteres especiais pelo script em lote.

Escaping Percents

The % character has a special meaning for command line parameters and FOR parameters.

To treat a percent as a regular character, double it:

%%

Escape Characters, Delimiters and Quotes

Script em lote

@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

Mais recursos

por 19.11.2017 / 16:14
0

De acordo com toda a ajuda recebida aqui, a lógica abaixo parece funcionar bem para minhas necessidades particulares:

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"
    
por 18.12.2017 / 21:11