Я должен удалить все файлы и папки от конкретной родительской папки кроме тех, которые имеют .svn как foldername и тех, которые имеют *.svn-base как их имя файла.
Существует ли сценарий Windows, который может сделать это для меня?
Edit1
@Mizo - Ваше решение возвратило следующее при вытирании всего:
C:\temp>clean-all-except-svn.bat
File not found - *.svn_base
0 File(s) copied
0 File(s) copied
Я изменил ссылку clean.bat в самом файле.
Edit2
Я зафиксировал опечатку следующим образом, но тем не менее ту же ошибку
XCOPY /Q /Y *.svn-base __cltmp
C:\temp>clean-all-except-svn.bat
File not found - *.svn-base
0 File(s) copied
0 File(s) copied
Edit3
(a) Это продолжает предлагать мне
Confirm
The item at C:\temp\f\a\d has children and the Recurse parameter was not specified. If you continue,
all children will be removed with the item. Are you sure you want to continue?
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"):
(b) Это отображает тысячи сообщений как:
At line:1 char:86
+ get-childitem C:\temp\ -exclude *.svn-base,".svn" -recurse | foreach ($_) {remove-item <<<< $_.fullname}
+ CategoryInfo : PermissionDenied: (change_email.php.svn-base:FileInfo) [Remove-Item], IOException
+ FullyQualifiedErrorId : RemoveFileSystemItemUnAuthorizedAccess,Microsoft.PowerShell.Commands.RemoveItemCommand
Remove-Item : Cannot remove item C:\temp\admin\.svn\text-base\change_email_submit.php.svn-base: Not Enough permission to
perform operation.
Использование Powershell:
get-childitem C:\folder\ -exclude *.svn-base,".svn" -recurse | foreach ($_) {remove-item $_.fullname}
Обновление: код ниже должен сделать то, что Вы хотели. Это удаляет все файлы кроме *.svn-base И не удаляет папок.
Некоторые примечания:gci
псевдоним get-childitem
, только оставить некоторое свободное место. Добавленный -Force
параметр к remove-item
так как у Вас, кажется, есть некоторая проблема полномочий.
gci C:\folder\ -exclude *.svn-base -recurse | foreach ($_) {if(!$_.PSIsContainer){remove-item -Force $_.fullname}}
clean.bat:
@ECHO OFF
FOR /F "tokens=*" %%d IN ('dir /B /AD') DO IF NOT %%d==.svn RMDIR /S /Q %%d
MD __cltmp
XCOPY /Q /Y *.svn_base __cltmp
FOR /F "tokens=*" %%f IN ('dir /B /A-D') DO IF NOT %%f==clean.bat DEL /F /Q %%f
XCOPY /Q /Y __cltmp\* .
RMDIR /S /Q __cltmp