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

Чтобы удалить все «.svn» файлы / папки / подпапки в «myfolder», я использую эту простую строку в командном файле:

FOR /R myfolder %%X IN (.svn) DO (RD /S /Q "%%X")

Это работает, но если файлов / папок ".svn" нет, в пакетном файле появляется предупреждение: "Система не может найти указанный файл". Это предупреждение очень шумно, поэтому мне было интересно, какдайте понять, что если он не находит никаких файлов / папок ".svn", он должен пропустить команду RD.

Обычно достаточно использовать подстановочные знаки, но в этом случае я не знаю, как их использовать, потому что я не хочу удалять файлы / папки с расширением .svn, но я хочу удалить файлы / папки с именем точно ".svn", поэтому если я сделай это:

FOR /R myfolder %%X IN (*.svn) DO (RD /S /Q "%%X")

он больше НЕ удалит файлы / папки с именем ".svn". Я пробовал также это:

FOR /R myfolder %%X IN (.sv*) DO (RD /S /Q "%%X")

но это тоже не работает, он ничего не удаляет.

 macetw25 сент. 2013 г., 17:18
Отметим, что в новых версиях SubVersion (начиная с версии 1.7) папка метаданных .svn находится только на корневом уровне извлечения, а не в каждом каталоге.
 Marco Demaio02 июн. 2010 г., 17:02
@nickf: спасибо, что сказали мне, но мне пришлось выполнить другую задачу, когда мне нужно удалить файлы / папки .svn.
 nickf28 мар. 2010 г., 14:08
Вам известна функция экспорта SVN?svnbook.red-bean.com/en/1.0/re10.html "экспортирует чистое дерево каталогов из рабочей копии"

Ответы на вопрос(8)

for /f "tokens=* delims=" %%i in ('dir /s /b /a:d *svn') do (rd /s /q "%%i")
 PeanutPower03 окт. 2013 г., 02:30
приглашение cmd: for / f "tokens = * delims ="% i in ('dir / s / b / a: d * svn') do (rd / s / q "% i")

Странный sidenote: если я использую

FOR /R . %%X IN (*.svn) DO (echo "%%X")

вместо


FOR /R myfolder %%X IN (.svn) DO (RD /S /Q "%%X")

он не только перечисляет все каталоги, оканчивающиеся на .svn, он также перечисляет ВСЕ ИХ СОДЕРЖАНИЕ. Это ошибка в команде For, она дала мне расширение, где я не дал ему джокера. Очень странно.

кругозор

Решение Вопроса

ты можешь попробовать

FOR /R myfolder %%X IN (.svn) DO (RD /S /Q "%%X" 2>nul)
 Zbigniew Wiadro20 мар. 2013 г., 23:11
Это работает только в пакетных файлах. Когда вы используете его непосредственно в окне консоли, вы можете сбросить второй%. Так и должно быть: FOR / R myfolder% X IN (.svn) DO (RD / S / Q "% X" 2> nul)
 Marco Demaio28 мар. 2010 г., 16:37
Работает отлично! Спасибо!

На самом деле, этот ответ от Jesper Rønn-Jensen вhttp://justaddwater.dk/2011/03/01/easy-delete-all-svn-subfolders-in-windows-explorer/

Я думал, что так намного легче, чем я поделюсь. Я конвертирую несколько проектов из .SVN в .GIT, так что это было здорово. Он добавляет пункт меню в проводник, чтобы вы могли удалить папки. Создайте файл .reg и импортируйте его.

Windows Registry Editor Version 5.00
;
; Running this file will give you an extra context menu item in Windows Explorer
; "Delete SVN folders"
;
; For the selected folder, it will remove all subfolders named ".svn" and their content
; Tip from http://www.iamatechie.com/remove-all-svn-folders-in-windows-xp-vista/
;
; Enrichened with comments by Jesper Rønn-Jensen ( http://justaddwater.dk/ )
;
;
[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 && FOR /r \"%1\" %%f IN (.svn) DO RD /s /q \"%%f\" \""

Нечто подобное с помощью find:

rm -rf `find . -name ".svn" -type d`

Редактировать:

Я знаю, что это для Linux (я читаю Bash вместо партии). Я оставляю это здесь, чтобы помочь пользователям Linux, которые случайно оказались бы здесь :)

 nickf28 мар. 2010 г., 14:08
э-э ...Windows командный файл?
 Marco Demaio28 мар. 2010 г., 16:34
@nickf: что не так с "командным файлом Windows"? Я имею в виду файл с расширением .BAT.
 Nicolas Guillaume28 мар. 2010 г., 14:14
Сри, я читаю Баш ^^. В любом случае, это поможет пользователям Linux: p
 nickf29 мар. 2010 г., 02:28
@ Марко, нет ничего плохого в том, что ты сказал. Niklaos только что дал ответ на основе Unix, вот и все.

Чтобы удалить все файлы SVN на окнах

for /d /r . %d in (.svn) do @if exist "%d" rd /s/q "%d"

.svn это имя папки

Если вы хотите удалить все подпапки с именем.svn в Windows создайте командный файл с таким содержимым:

for /f "tokens=* delims=" %%i in ('dir /s /b /a:d *.svn') do (
rd /s /q "%%i"
)

сохранить его в файлdel_All_Dot_SVN_Folders.cmd , Запустить его. Вы сделали.

Благодаряhttp://www.axelscript.com/2008/03/11/delete-all-svn-files-in-windows/

Помните, что приведенный выше код имеет .svn, тогда как код в ссылке имеет только * svn, поэтому лучше иметь .svn, чтобы случайно не иметь нежелательного эффекта.

Вот мой любимый, простой и компактный:

find ./ -name ".svn" | xargs rm -Rf

FiSSH

Ваш ответ на вопрос