批处理文件:使用Set在一行上的多个命令

时间:2012-06-06 20:12:38

标签: batch-file

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

cmd /c blah

for blah我想做类似的事情:

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

第一次运行时这不起作用,因为set命令在第二行之前似乎没有生效。有什么想法吗?

4 个答案:

答案 0 :(得分:2)

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

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

另请注意,=中的set周围不能有空格,否则您将创建一个末尾有空格的变量名称(也就是说,您的方法永远不会无论如何已经工作了。)

答案 1 :(得分:0)

for %d in (some\path and\maybe\another\one) do @if not exist "%d" md "%d"

答案 2 :(得分:0)

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

Setlocal EnableDelayedExpansion
set say=Hello && echo !say! && echo Done!

答案 3 :(得分:0)

您也可以这样做

SET _KillElevated=1& SET _KillWithGrace=1