我有一个框架,我只能通过PowerShell运行东西,但我需要运行批处理文件命令。我正在尝试运行PowerShell脚本,例如:
cmd /c blah
for blah
我想做类似的事情:
set myPath = c:\theDir && if not exist %myPath% mkdir %myPath%
第一次运行时这不起作用,因为set
命令在第二行之前似乎没有生效。有什么想法吗?
答案 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