我有一个框架,我只能通过 PowerShell 运行东西,但我需要运行批处理文件命令。我正在尝试运行 PowerShell 脚本,例如:
cmd /c blah
因为blah
我想做类似的事情:
set myPath = c:\theDir && if not exist %myPath% mkdir %myPath%
这在我第一次运行时不起作用,因为该set
命令似乎直到第二行才生效。有任何想法吗?
我有一个框架,我只能通过 PowerShell 运行东西,但我需要运行批处理文件命令。我正在尝试运行 PowerShell 脚本,例如:
cmd /c blah
因为blah
我想做类似的事情:
set myPath = c:\theDir && if not exist %myPath% mkdir %myPath%
这在我第一次运行时不起作用,因为该set
命令似乎直到第二行才生效。有任何想法吗?
这是因为在解析cmd
行时评估变量,而不是在运行时。要获得后一种行为,您必须使用延迟扩展:
cmd /c /v:on "set MyPath=C:\theDir&& if not exist "!myPath!" mkdir "!myPath!"
另请注意,您不能=
在 a周围有空格set
,否则您将创建一个末尾带有空格的变量名(也就是说,您的方法无论如何都不会奏效)。
for %d in (some\path and\maybe\another\one) do @if not exist "%d" md "%d"
你也可以这样做
SET _KillElevated=1& SET _KillWithGrace=1
您还可以在运行多个命令之前定义延迟扩展。这样你就不必打开一个新的 CMD 实例:
Setlocal EnableDelayedExpansion
set say=Hello && echo !say! && echo Done!