删除除扩展名为 .svn 和 .svn-base 的文件和文件夹之外的所有文件和文件夹

删除除扩展名为 .svn 和 .svn-base 的文件和文件夹之外的所有文件和文件夹

我需要从特定的父文件夹中删除所有文件和文件夹,除了以 .svn 作为文件夹名称的文件和文件夹以及以 *.svn-base 作为文件名的文件和文件夹。

是否有一个 Windows 脚本可以为我完成这个任务?


編輯1

@Mizo - 您的解决方案在清除所有内容时返回了以下内容:

C:\temp>clean-all-except-svn.bat
File not found - *.svn_base
0 File(s) copied
0 File(s) copied

我已经在文件本身中更改了 clean.bat 引用。


編輯2

我按如下方式修复了拼写错误,但仍然是同样的错误

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

编辑3

(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.

答案1

使用 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}}

答案2

清理.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

相关内容