我正在尝试创建一个包含PowerShell的批处理脚本,以获取昨天的日期。
到目前为止,我已经设法写了#34;得到日期"部分,如下:
powershell $date=Get-Date; $date=$date.AddDays(-1); $date.ToString('yyyyMMdd')
如何将$date
变量传回批处理脚本,以便我可以使用$date
变量来移动文件?我想在这里实现的目标如下:
move *%date%*.xml D:\Sample\
我想在一个批处理脚本中完成此任务。
答案 0 :(得分:1)
如果我理解你的问题,你想编写一个使用Powershell获取上一个日期的批处理脚本(.bat
)。
以下是您可以在.bat
脚本中添加以获取值的内容。
powershell -Command (Get-Date).AddDays(-1).ToString('yyyyMMdd')
你不需要“传回”变量。相反,您只需将powershell
的输出调用所需的信息即可。使用您发布的代码,没有输出。但是,使用上面的内容将等同于“返回”代码中的$date
变量。
Batch实际上没有一种简单的方法来捕获变量。捕获变量有两种主要方法。您要么使用for
循环(这是一种黑客攻击),要么将输出写入文件,然后将该文件读入变量。
方法1 - 循环
以下是将输出捕获到名为v
的变量的代码(使用%v%
访问)。
for /f %d in (
'powershell.exe -Command "(Get-Date).AddDays(-1).ToString(\"yyyyMMdd\")"'
) do set "v=%d"
方法2 - 文件输出
在这里,我们将powershell输出写入文件,该文件的名称存储在变量tempFile
中。然后,我们将文件的内容读回到名为v
的变量中。最后,我们删除tempFile
。
powershell.exe -Command (Get-Date).AddDays(-1).ToString('yyyyMMdd') > %tempFile%
set /p v=< %tempFile%
del %tempFile%
答案 1 :(得分:1)
您可以按如下方式运行PowerShell命令行,以获取批处理脚本中变量的值:
-o
您不应该命名变量@echo off
for /f "tokens=* delims=" %%d in (
'powershell.exe -Command "(Get-Date).AddDays(-1).ToString(\"yyyyMMdd\")"'
) do set "yesterday=%%d"
move *%yesterday%*.xml D:\Sample\
,因为这是变量CMD会自动填充当前日期。见%date%
:
%DATE% - 使用与DATE命令相同的格式扩展到当前日期。
但是,正如@alroc在您的问题的评论中所建议的那样,在PowerShell中编写整个脚本可能更简单:
help set
答案 2 :(得分:0)
你可以完全在CMD.exe中完成它,虽然它有点复杂......
:Get_Dates
set day=%DATE:~-10,2%
set month=%DATE:~-7,2%
set year=%DATE:~-4%
set TODAY=%year%-%month%-%day%
set /a tag-=1
if %day% LEQ 0 set /a monat-=1
if %month% LEQ 0 set /a jahr-=1 & set monat=12
if %day% GEQ 1 goto :done
rem day is in the previous month
if %month% EQU 1 set tag=31
if %month% EQU 3 set tag=31
if %month% EQU 4 set tag=30
if %month% EQU 5 set tag=31
if %month% EQU 6 set tag=30
if %month% EQU 7 set tag=31
if %month% EQU 8 set tag=31
if %month% EQU 9 set tag=30
if %month% EQU 10 set tag=31
if %month% EQU 11 set tag=30
if %month% EQU 12 set tag=31
if %month% NEQ 2 goto :done
rem februar so check year
set /a mod4=year % 4
set /a mod100=year % 100
set /a mod400=year % 400
set day=28
if %mod4% NEQ 0 goto :done
set day=29
if %mod100% NEQ 0 goto :done
set day=28
if %mod400% NEQ 0 goto :done
set day=29
:done