Пакетный файл для удаления файлов в папках - PullRequest
0 голосов
/ 12 октября 2010

У меня есть много папок в каталоге, которые содержат различные файлы.Каждое имя файла начинается с XXX_, где XXX может быть именем папки, в которой находится файл. Мне нужно пройти через все эти папки и удалить любой файл, где XXX - это имя папки, в которой находится файл.

Ответы [ 3 ]

1 голос
/ 12 октября 2010

Пожалуйста, обратите внимание на этот вопрос: Iterating through folders and files in batch file?.

Я думаю, это должно вам помочь.

Пожалуйста, дайте мне знать, если вам нужна дополнительная помощь.

РЕДАКТИРОВАТЬ # 1

Символ джокера в командной строке DOS - *. Затем при поиске в каталоге определенных файлов вы можете рассмотреть свое регулярное выражение, то есть XXX_, и дополнить его *, при этом будут возвращены только те файлы, которые вы ищете.

Это означает, что вместо шаблона *.zip в одном из циклов FOR с учетом связанного вопроса ваш первый цикл FOR должен содержать имя вашего каталога, а затем взять эту переменную, объединенную с символом *, чтобы получить только файлы, которые вы ищете.

Например, попробуйте следующее:

dir /s XXX_*.*

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

РЕДАКТИРОВАТЬ # 2

Спасибо, что уточнили ваше беспокойство.

Вот пример кода, который, я надеюсь, должен помочь. Теперь я знаю, что вы говорите, что у вас правильный цикл, так что, возможно, понадобится только часть этого кода.

@echo off

setlocal enableextensions enabledelayedexpansion

for /F "delims==" %%d in ('dir /ogne /ad /b /s .') do (
    for /F "delims==" %%f in ('dir /b "%%d\%%~nd_*.*"') do (
        echo %%d\%%f
    )
)

endlocal

Это работает и перечисляет файлы, содержащиеся в подпапках из текущей (.) папки.

Я проверил его из следующей папки:

C: \ DOCUME ~ 1 \ marw1 \ MyDocu ~ 1 \ MyMusi ~ 1

Где находится папка «XXX». Эта папка «XXX» содержит следующие файлы:

  1. Копия XXX_blah.bmp;
  2. XXX_blah.bmp;
  3. XXX_1234.ppt;
  4. XXX_textfile.txt.

Из этой структуры вывод:

C: \ DOCUME ~ 1 \ marw1 \ MyDocu ~ 1 \ MyMusi ~ 1 \ XXX \ XXX_blah.bmp C: \ DOCUME ~ 1 \ marw1 \ MyDocu ~ 1 \ MyMusi ~ 1 \ XXX \ XXX_1234.ppt C: \ DOCUME ~ 1 \ marw1 \ MyDocu ~ 1 \ MyMusi ~ 1 \ XXX \ XXX_textfile.txt

Тогда я подозреваю, что если вместо команды echo использовать инструкцию del, то добьемся цели. Это означает, что для изоляции самого Foldername от его пути вам необходимо использовать инструкцию ~n с именем переменной вашей папки, например %%~nd, где имя переменной итерируемой папки - %%d.

Более того, вы можете даже использовать в процессе параметризованный пакетный файл вместо его жесткого кодирования, то есть, если ваш 'set YourFolder =...' является частью вашего рабочего кода. Это может выглядеть так:

@echo off

setlocal...

set root = %1
set root = %root:~1%
set root = %root:~0,-1%

...

endlocal

Вместо того, чтобы иметь '.', как показано в моем первом цикле FOR, вы заменили бы его на "%root%", чтобы рассматривать ваш параметр командной строки вместо жестко заданного пути к файлу.

Я помогаю, это помогает, искренне!

0 голосов
/ 01 апреля 2013
cd C:\"foldername"
del /s XXX_"*"
cls
exit
0 голосов
/ 12 октября 2010

Как говорит Рон, так как вопрос помечен как "windows".

РЕДАКТИРОВАТЬ:

Ответ Рона, который, похоже, исчез, должен был использовать del /s

РЕДАКТИРОВАТЬ 2:

ОК, это действительно только для файла имен, но не для каталогов.Для каталогов вы должны использовать что-то вроде наброска ниже.

Дополнительная информация: когда вы хотите сделать то же самое рекурсивно для файлов в дереве каталогов, и (в отличие от del) нет команды, котораяуже выполняет обход для вас, вы можете использовать опцию /R команды for.

Чтобы просмотреть документы команды for, выполните, например, start "for-help" cmd /k for /?.

Cheers& hth.,

- Alf

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...