我相信,[Environment]::SetEnvironmentVariable
如Dan所建议的那样,在PowerShell中设置环境变量是没有意义的,因为如果您选择临时的“进程”上下文,或者在批处理文件的环境中没有该变量,则在PowerShell终止时将丢失该变量的内容。如果您选择永久的“机器”或“用户”上下文-也就是说,除非您的整个脚本是用PowerShell编写的,否则首先不会出现问题:
C:\Users\myuser> echo %DOW%
%DOW%
C:\Users\myuser> powershell
Windows PowerShell
Copyright (C) 2009 Microsoft Corporation. Alle Rechte vorbehalten.
PS C:\Users\myuser> $dow = (get-date).dayofweek
PS C:\Users\myuser> [Environment]::SetEnvironmentVariable("DOW", $dow, "User")
PS C:\Users\myuser> [Environment]::SetEnvironmentVariable("DOW", $dow, "Process")
PS C:\Users\myuser> exit
C:\Users\myuser> echo %DOW%
%DOW%
C:\Users\myuser>
您可以使用该for
命令作为变通办法来解析PowerShell命令的输出并将其放入变量中:
for /F "usebackq tokens=1" %%i in (`powershell ^(get-date^).dayofweek`) do set DOW=%%i
请注意^
用于在PowerShell调用中转义括号特殊字符的脱字符号。
如果要从命令行而不是在批处理文件上下文中进行测试,则需要使用以下命令替换%%
before变量引用%
:
C:\Users\myuser> for /F "usebackq tokens=1" %i in (`powershell ^(get-date^).dayofw
eek`) do set DOW=%i
C:\Users\myuser> set DOW=Friday
C:\Users\myuser>