2015-05-20 2 views
1

Я хочу создать скрипт, который выполняет следующие действия: для каждой директории в пути; проверяет, является ли имя каталога «профилями», и если это не так, он запускает программу.Оператор if в цикле for

Это то, что я до сих пор:

@ECHO OFF 
setlocal enabledelayedexpansion 

for /d %%i in ("\\server\c$\path\*") do (
    set filename=%%~NXi 
    IF !filename!=="profiles"(
) ELSE (
    mycommand.exe 
) 
) 

Этот код просто возвращает ошибку «синтаксис недопустимой команды».

ответ

1

вам нужно пространство перед открытием скобки и вам нужно установить команду, если условия (в данном случае я настроил REM):

@ECHO OFF 
setlocal enabledelayedexpansion 

for /d %%i in ("\\server\c$\path\*") do (
    set filename=%%~NXi 
    IF "!filename!"=="profiles" (
    rem :: see the space before the bracket above 
) ELSE (
    mycommand.exe 
) 
) 
+1

Спасибо :) и для будущей ссылки я также должен был использовать кавычки на! Filename! в заявлении IF. В противном случае этот кодовый блок не будет запускаться. –

+0

Когда вы работаете с каталогами, '%% NXi' будет работать, но не имеет смысла, потому что каталоги не имеют расширений. Так что '%% Ni' будет достаточно. – MichaelS

+0

@JackPettersson - aah yes :-) – npocmaka

1

Я думаю, что ваши первоначальные намерения является то, что вы хотите запустите команду только в том случае, если имя папки НЕ является «профилем». Вот где приходит пустое предложение IF и ваше использование ELSE. Сравните с этим:

setlocal enabledelayedexpansion 

for /d %%i in ("\\server\c$\path\*") do (
    set filename=%%~nxi 
    IF /I NOT "!filename!"=="profiles" (
     mycommand.exe 
) 
) 

Пока мы на нем, я добавил параметр '/ I', чтобы сделать сравнение независимым от случая.

+0

Это было действительно, спасибо :) –

Смежные вопросы