Удалите файлы с помощью команды Windows и отобразите список удаленных файлов - PullRequest
0 голосов
/ 29 октября 2018

Я хочу удалить файлы из папки с рисунком. Я использую программу на C #, которая вызывает команду Windows и печатает журнал команды. В настоящее время я использую эту команду:

del Test\*xyz* /s

Используя ключ / s, я получаю список файлов, которые удаляются в журнале. Но ключ / s также удаляет файлы из подкаталога, которые мне не нужны. Есть ли способ удалить файлы и получить список файлов?

1 Ответ

0 голосов
/ 30 октября 2018

Если я правильно понял ваш вопрос, вы хотите удалить файлы в папке (без файлов в подкаталогах). Вы можете добиться этого, используя for -loop в Batch-File.

Для вашего случая использования вы должны написать что-то вроде следующего в пакетный файл (.bat):

@ECHO OFF

for /f %%i in ('dir Test\*xyz* /b /a-d') do (
  echo %%i
  del %%i
)

Цикл перебирает каждую строку в результате выполнения команды dir и выводит имя файла в консоль. После этого он удаляется.

В документации для -цикловых состояний:

  • Итерация и разбор файла

    Использовать синтаксический анализ файла для обработки вывода команды, строк и содержимого файла. Используйте итерационные переменные для определения содержимого или строк, которые вы хотите исследовать, и используйте различные параметры ParsingKeywords для дальнейшей модификации анализа. Используйте параметр токена ParsingKeywords , чтобы указать, какие токены следует передавать в качестве итерационных переменных. Обратите внимание, что при использовании без параметра токена / f будет проверять только первый токен .

    Синтаксический анализ файла состоит из чтения выходных данных, строки или содержимого файла, а затем разбиения его на отдельные строки текста и разбора каждой строки на ноль или более токенов. Затем вызывается цикл for со значением итерационной переменной, установленным в токен. По умолчанию / f пропускает первый пустой токен из каждой строки каждого файла. Пустые строки пропускаются.

    Синтаксис:

    for /f ["<ParsingKeywords>"] {%%|%}<Variable> in (<Set>) do <Command> [<CommandLineOptions>]
    for /f ["ParsingKeywords"] {%%|%}<Variable> in ("<LiteralString>") do <Command> [<CommandLineOptions>]
    for /f ["<ParsingKeywords>"] {%%|%}<Variable> in ('<Command>') do <Command> [<CommandLineOptions>]
    

Итак, в приведенном выше примере мы использовали последнюю версию (использовали вывод команды). Указанная команда является командой dir .

В документации по команде dir указано:

/b Отображение пустого списка каталогов и файлов без дополнительной информации. / b переопределяет /w.

и

/a[[:]<Attributes>] Отображает только имена этих каталогов и файлов с указанными вами атрибутами. Если вы опустите / a, dir отобразит имена всех файлов, кроме скрытых и системных файлов. Если вы используете / a без указания атрибутов, dir отображает имена всех файлов, включая скрытые и системные файлы.

В следующем списке описаны все значения, которые вы можете использовать для атрибутов. Использование двоеточия (:) необязательно. Используйте любую комбинацию этих значений и не разделяйте значения пробелами.

d Каталоги
h Скрытые файлы
s Системные файлы
l Очки повторной обработки
r Только для чтения файлов
a Файлы готовы к архивированию
i Не проиндексированные файлы содержимого
- Префикс, означающий «не»

, поэтому вам нужно будет использовать /b для простого списка имен файлов и /a-d для исключения возможных каталогов в списке результатов.

На заметку: Вы также можете добиться этого, используя простой C #. Если вам нужна помощь, просто дайте мне знать; -)

...