Tim*_*Tim 62 powershell batch windows-command-prompt
我想在 cmd.exe 中有一个包含星期几的环境变量。
当我运行这个命令时,我得到了我想要的结果。
C:\Users\tisc> powershell (get-date).dayofweek
Friday
Run Code Online (Sandbox Code Playgroud)
在这里,我试图将结果存储在环境变量中。
C:\Users\tisc> set dow = powershell (get-date).dayofweek
Run Code Online (Sandbox Code Playgroud)
但是当我试图得到它时,我没有得到我想要的字符串。
C:\Users\tisc> set dow
DoW=0
dow = powershell (get-date).dayofweek
Run Code Online (Sandbox Code Playgroud)
我的目标是将批处理文件中的变量用于某些备份脚本。
Ion*_*rel 91
您可以使用以下内容:
$env:DOW = "foo"
Run Code Online (Sandbox Code Playgroud)
Dan*_*Dan 22
您应该在 PowerShell 中运行这两个命令,因为 PowerShell 不仅能够操作环境变量。
IE:
$dow = (get-date).dayofweek
[Environment]::SetEnvironmentVariable("DOW", $dow, "Machine")
Run Code Online (Sandbox Code Playgroud)
或者
[Environment]::SetEnvironmentVariable("DOW", $dow, "User")
Run Code Online (Sandbox Code Playgroud)
顺便说一句,您的脚本不起作用,因为您得到的只是 PowerShell 返回代码,而不是它产生的数据。可能有一种方法可以让它工作,但与仅使用适当的 PowerShell 脚本相比,它最终毫无意义。
为了完整起见,这里有一篇来自 Microsoft 的关于 PowerShell 和环境变量的好文章:
更新:在聊天中与 @syneticon-dj 一起审查了这个解决方案后,您使用这种方法面临的问题似乎是必须重新加载命令提示符,然后才能反映外部发生的环境变量的变化。
您没有提供有关您正在做什么的详细信息,但如果这是您启动 PowerShell 的唯一原因,那么我的实际建议是检查您的工作方式。
要么使用 PowerShell 完成整个过程,要么考虑使用计划任务?您可以根据一周中的哪一天安排任务。
the*_*bit 20
我相信[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>
Run Code Online (Sandbox Code Playgroud)
您可以使用该for命令作为解决方法来解析 PowerShell 命令的输出并将其放入变量中:
for /F "usebackq tokens=1" %%i in (`powershell ^(get-date^).dayofweek`) do set DOW=%%i
Run Code Online (Sandbox Code Playgroud)
请注意^用于在 PowerShell 调用中转义括号特殊字符的插入字符。
如果您是从命令行而不是在批处理文件上下文中测试它,则需要将%%之前的变量引用替换为%:
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>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
157997 次 |
| 最近记录: |