2

我有一个框架,我只能通过 PowerShell 运行东西,但我需要运行批处理文件命令。我正在尝试运行 PowerShell 脚本,例如:

cmd /c blah

因为blah我想做类似的事情:

set myPath = c:\theDir && if not exist %myPath% mkdir %myPath%

这在我第一次运行时不起作用,因为该set命令似乎直到第二行才生效。有任何想法吗?

4

4 回答 4

2

这是因为在解析cmd行时评估变量,而不是在运行时。要获得后一种行为,您必须使用延迟扩展:

cmd /c /v:on "set MyPath=C:\theDir&& if not exist "!myPath!" mkdir "!myPath!"

另请注意,您不能=在 a周围有空格set,否则您将创建一个末尾带有空格的变量名(也就是说,您的方法无论如何都不会奏效)。

于 2012-06-07T09:41:39.713 回答
0
for %d in (some\path and\maybe\another\one) do @if not exist "%d" md "%d"
于 2012-06-06T20:16:16.640 回答
0

你也可以这样做

SET _KillElevated=1& SET _KillWithGrace=1
于 2018-12-22T13:04:47.317 回答
0

您还可以在运行多个命令之前定义延迟扩展。这样你就不必打开一个新的 CMD 实例:

Setlocal EnableDelayedExpansion
set say=Hello && echo !say! && echo Done!
于 2018-01-09T13:06:33.453 回答