2

У меня есть папка с множеством подпапок. Мне нужен командный файл, который просматривает список подпапок и проверяет, существует ли указанный файл. Если файл не существует, подпапка может быть удалена.

Это должно работать на рабочих станциях Windows 7.

Я перепутал синтаксис в моих командах for /f и ifли:

for /f /f%% in ('dir /b c:\test') do if exist "test.txt" rename c:\test\%% tobedeleted

Я думаю, что я либо пытаюсь сделать многое в одном аргументе, либо упускаю что-то жизненно важное.

1 ответ1

1

Если файл не существует, подпапка может быть удалена.

Вам нужно что-то вроде следующего:

echo off
setlocal enableDelayedExpansion
for /f %%i in ('dir /a:d /b /s c:\test') do (
  set _dir=%%i
  if exist !_dir!\test.txt (
    rem do nothing
    ) else (
    echo rd !_dir!
    )
  )
endlocal

Заметки:

  • Удалите echo перед rd когда вы уверены, что правильные каталоги будут удалены.
  • Добавьте /s в rd если каталог содержит подкаталоги.
  • Добавьте /q к rd чтобы удалить подтверждение Y/N.

Дальнейшее чтение

  • Индекс AZ командной строки Windows CMD - Отличный справочник по всем вопросам, связанным с командной строкой Windows.
  • dir - Показать список файлов и подпапок.
  • if - Условно выполнить команду.
  • enabledelayedexpansion - отложенное расширение приведет к тому, что переменные будут расширяться во время выполнения, а не во время анализа.
  • rd - Удалить папку (и).
  • for /f - Циклическая команда против результатов другой команды.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .