2017-04-12 7 views
-4

배치 스크립트에서 PowerShell "(Get-Date).AddDays(-7).ToString('ddMMyyyy')"을 사용하고 있습니다.powershell에서 Get-Date의 변수 insted 사용

변수 대신 Get-Date 함수를 사용하고 싶습니다. 가능한가?

ADate은 변수 이름입니다.

편집 : 제안으로

, 내 스크립트는이 :

For /F UseBackQ %%A In (
    `PowerShell "(Get-Date).AddDays(-7).ToString('ddMMyyyy')"` 
) Do Set "Freq=%%A" 

Adate 파일 이름에서 유래 간단한 문자열이며, 16112016 같은 값을 가진다.

+0

날짜 변수의 형식은 무엇입니까? 간단한 문자열? ISO8601 문자열? 타임 스탬프? –

+0

@RemyGrandin의 문자열 "16112016"(2016 년 11 월 16 일) – Ashu

+0

무엇을 정말로 성취하려고합니까? 오늘 날짜를 기반으로 계산 된 날짜 대신 하드 코딩 된 날짜를 사용 하시겠습니까? – vonPryz

답변

0

다음은 알려진 파일의 속성에서 마지막으로 수정 한 시간이 걸리고 칠일 이전 날짜의 변수를 생성, (분명히 필요 C:\Test\TestFile.ext 변경) :

For /F UseBackQ %%A In (
    `PowerShell "((gi 'C:\Test\TestFile.ext').LastWriteTime).AddDays(-7).ToString('ddMMyyyy')"` 
) Do Set "ADate=%%A" 

편집

다음 예제에서는 알려진 형식의 날짜 문자열 (이 경우 두 변수로 제공). 그런 다음 7 일 뺀 날짜 개체에 해당 문자열을 변환하고 새로운 %ADate% 변수에 문자열로 다시 설정됩니다 : 당신은 파일에 PowerShell 명령의 출력을 저장 한 다음 해당 파일을 읽을 수

@Echo Off 
Set "DateStr=16112016" 
Set "DFormat=ddMMyyyy" 

For /F UseBackQ %%A In (`Powershell^ 
"([datetime]::ParseExact('%DateStr%','%DFormat%', [System.Globalization.CultureInfo]::CurrentCulture)).AddDays(-7).ToString('%DFormat%')" 
`) Do Set "ADate=%%A" 
Echo(%ADate% 

Timeout -1 
+0

여기에 (Get-Date) 대신에 File Name에서 값을 가져 오는 Variable을 사용하고 싶습니다. – Ashu

+0

나는 나의 대답을 적절하게 업데이트했다. 나의 가정이 여전히 틀린다면, 당신의 일을 더 잘 설명 해주십시오. – Compo

+0

빙고 ...! 예상대로 작동하지만 질문이 있습니다! 우리가 "DFormat"을 사용하지 않는 이유는 무엇입니까? – Ashu

2

당신은 일괄 변수에 외부 명령의 출력을 얻을 수있는 for 루프를 사용해야합니다

@echo off 
for /f "usebackq tokens=*" %%d in (`powershell "..."`) do set "adate=%%d" 
echo %adate% 

usebackq 그냥 그렇게 당신이 중첩 된 작은 따옴표를 이스케이프 할 필요가 없습니다되는 역 따옴표 명령 문자열.

+0

OP는 원래의 질문을 편집하고 그에 대한 의견이 하나도 없으므로 제안 사항을 모두 추가 했으므로 지금 대답하지 않으셔도됩니다. ** ** :/** ** (나는 대답을 upvoted했고이 답변을 upvoted) – Aacini

0

그런 다음 임시 파일을 삭제하십시오.

PowerShell "(Get-Date).AddDays(-7).ToString('ddMMyyyy')" >temp.txt 
    set /p myVarDate= < date_Shell.txt 
    echo Date from Shell %myVarDate% 
    del temp.txt 
0

확인. 나는 나의 수정 구슬을 가지고 그것을 물었다 : "이 솔루션은 여기에 무엇"하고 대답했다 : "

PowerShell "(Get-Date -Date '!Adate:~4!-!Adate:~2,2!-!Adate:~0,2!').AddDays(-7).ToString('ddMMyyyy')" 

에 의해

PowerShell "(Get-Date).AddDays(-7).ToString('ddMMyyyy')" 

변경",하지만 난 그것을 이야기 무엇인지 전혀 모른다 약! ;)