2015-06-10 4 views
0

У меня есть следующие строки:Batch команда «для» не работает

for %i in (bin\Setup) do if not %i == setup.exe del %i 

Это для симулирует, чтобы удалить все файлы в bin\Setup, кроме как от одного называется setup.exe, но он не работает .. .

Любые идеи о том, что я делаю неправильно?

+0

Использование PowerShell: 'get-childitem -file bin \ Setup \ * -exclude setup.exe | remove-item -whatif' (удалить '-whatif' для фактического удаления) –

+0

Мне нужно использовать регулярную команду, потому что я не хочу устанавливать что-то другое. – Sonhja

+0

PowerShell встроен в ОС в Windows 7 и новее. Нечего устанавливать. –

ответ

1
for %i in ("bin\Setup\*") do if /i not "%~nxi"=="setup.exe" echo del "%~fi" 

Внесены изменения:

  • подстановочные включены, чтобы перечислить все файлы в папке.
  • if теперь чувствительно к регистру (/i)
  • ссылки на файлы цитируются, чтобы избежать проблем с пробелами
  • только имя и расширение файла (%~nxi) тестируется. Вы можете выполнить for /?, чтобы получить полный список доступных модификаторов.
  • удаление файла используется полный путь (%~fi) к нему

Это написано быть выполнена из командной строки. Внутри пакетного файла процент знаки должны быть экранированы, заменив % с %%

for %%i in ("bin\Setup\*") do if /i not "%%~nxi"=="setup.exe" echo del "%%~fi" 

del команд с префиксом echo так что файлы не удаляются, то команда просто повторил утешать. Если выход правильный, удалите echo.

+0

Кажется, он не работает. Он говорит, что в настоящий момент он не ожидает «%% ~ nxi» == «setup.exe». ?? – Sonhja

+0

Используйте 'if/i not' вместо' if not/i'. – JosefZ

+0

@ Сонья, моя вина. Теперь исправлено –

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