Удалите все файлы .svn и .project с помощью реестра Windows - PullRequest
3 голосов
/ 27 ноября 2011

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

  • .buildpath
  • .project
  • .settings (каталог)

После ответов на этот вопрос: Пакетный файл Windows для удаления файлов и папок .svn

У меня есть:

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\DeleteSVN]
@="Delete SVN Folders"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\DeleteSVN\command]
@="cmd.exe /c \"TITLE Removing SVN Folders in %1 && COLOR 9A && FOR /r \"%1\" %%f IN (.svn) DO RD /s /q \"%%f\" \""

Ответы [ 2 ]

6 голосов
/ 19 декабря 2011

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

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\DeleteSVN]
@="Delete SVN Folders"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\DeleteSVN\command]
@="cmd.exe /c \"TITLE Removing SVN Folders in %1 && color 9A && for /r \"%~1\" %%F in (.) do (rd /s /q \"%%~fF\.svn\" \"%%~fF\.settings\" & del \"%%~fF\.buildpath\" \"%%~fF\.project\")2>nul \""

Это решение похоже на то, что описывал Лаф, за исключением того, что он предложил использовать && перед последней командой.Я думаю, что это может создать вам проблемы, потому что следующая команда будет выполнена только в случае успеха RD.Но ваш текущий алгоритм пытается удалить каталог из всех подкаталогов, даже если его там нет.Я использовал &, чтобы следующая команда (DEL) всегда выполнялась независимо от результата RD.Я расширил RD для удаления обоих каталогов, а добавленная команда DEL удаляет оба файла.

Я перенаправил stderr на nul, чтобы вы не видели кучу сообщений об ошибках.Алгоритм очень неэффективен и может генерировать много сообщений об ошибках в зависимости от количества подкаталогов.

Если ваши требования усложняются или вы хотите разработать более эффективный скрипт, возможно, вам лучшесоздать пакетный файл, который выполняет работу, и вызвать пакетный файл из записи реестра.Сложно читать и поддерживать сложный набор команд в одной строке.Escape-последовательности также становятся утомительными в реестре.

2 голосов
/ 28 ноября 2011

Некоторые подробности о команде, реализованной в настоящее время:

  • cmd.exe /c: вызовет новый интерпретатор команд и выполнит следующую команду, а затем завершит работу (это то, что делает /C).Остальная часть команды (между первой и последней \" является командой, которая будет выполняться интерпретатором команд)
  • TITLE Removing SVN Folders in %1: изменяет заголовок интерпретатора команд на «Удаление папок SVN».в папке ".
  • COLOR 9A: изменяет цветовую схему вашего интерпретатора команд
  • FOR /r \"%1\" %%f IN (.svn) DO RD /s /q \"%%f\": удаляет все папки с именем .svn в текущей папке.

% 1 представляет папку, в которой вы щелкнули правой кнопкой мыши.&& между командами означает, что интерпретатор команд будет выполнять все три команды одну за другой.Что вы должны сделать, это добавить свою собственную команду в конец командной строки, например:

@="cmd.exe /c \"TITLE Removing SVN Folders in %1 && COLOR 9A && FOR /r \"%1\" %%f IN (.svn) DO RD /s /q \"%%f\" && *MyCommand*\""

, где MyCommand - это команда, которая вам нужнаудалить временные файлы.

...