2012-06-06 6 views
2

У меня есть фреймворк, где я могу работать только с помощью PowerShell, но мне нужно запустить командные файлы командных файлов. Я пытаюсь запустить PowerShell сценарий, что-то вроде:Пакетный файл: несколько команд в одной строке с помощью Set

cmd /c blah 

для blah Я хочу сделать что-то вроде:

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

Это не будет работать в первый раз, когда я запустить его в качестве команды set похоже, не влияет на вторую строку. Есть идеи?

ответ

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

Это происходит потому, что cmd оценивает переменные, когда линия разобран, не тогда, когда это запустить. Чтобы получить последнее поведение, которое вы будете использовать замедленное расширение:

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

Отметим также, что вы не должны иметь места вокруг = в set, в противном случае вы создаете имя переменной с пробелом в конце (т. е. ваш подход никогда бы не сработал).

+0

В соответствии с вопросом, я думаю, что вы имели в виду, чтобы объединить эти две строки в ответ на одну строку, используя «&», не ты ? – djangofan

0

Вы также можете определить задержанное расширение перед запуском нескольких команд. Таким образом, вам не придется открывать новый экземпляр CMD:

Setlocal EnableDelayedExpansion 
set say=Hello && echo !say! && echo Done! 
Смежные вопросы