![防止 cmd.exe 删除隐藏子文件夹中的文件](https://linux22.com/image/1487746/%E9%98%B2%E6%AD%A2%20cmd.exe%20%E5%88%A0%E9%99%A4%E9%9A%90%E8%97%8F%E5%AD%90%E6%96%87%E4%BB%B6%E5%A4%B9%E4%B8%AD%E7%9A%84%E6%96%87%E4%BB%B6.png)
我有以下文件结构
Parent\Deploy (folder)
Parent\Deploy\.svn (hidden folder)
Parent\Deploy\.svn\file1 (regular file)
Parent\Deploy\.svn\file2 (regular file)
Parent\Deploy\.svn\file3 (regular file)
Parent\Deploy\file4 (regular file)
Parent\Deploy\file5 (regular file)
Parent\Deploy\file6 (regular file)
Parent\Deploy\Something (regular folder)
Parent\Deploy\Something\file7 (regular file)
假设我现在在 C:\Parent,我想使用 DEL 命令删除所有文件 4、5、6、7。
这是我的尝试:
1) DEL /f /q /s .\Deploy
2) DEL /f /q /s /A:-H .\Deploy
但是这也会删除隐藏的 .svn 中的文件。第二个仅排除隐藏的文件,但文件 1-3 是“正常的”,因此无论如何它都会删除它们。
答案1
如何递归删除除隐藏目录中的文件之外的所有文件?
使用以下批处理文件:
@echo off
setlocal enableDelayedExpansion
rem walk file tree, 1/ finding non-hidden directories then 2/ finding files.
rem 1/ find non-hidden directories
for /f "usebackq tokens=*" %%i in (`dir /b /s /a:d-h`) do (
rem 2/ find and delete files
echo Processing directory: %%i
for /f "usebackq tokens=*" %%j in (`dir /b /a:-d %%i 2^> nul`) do (
echo Processing file: %%i\%%j
del /f /q "%%i\%%j"
)
)
进一步阅读
- Windows CMD 命令行的 AZ 索引- 与 Windows cmd 行相关的所有事物的绝佳参考。
- 德尔- 删除一个或多个文件。
- 目录- 显示文件和子文件夹的列表。
- 对于/f- 循环命令以执行另一个命令的结果。
- 重定向- 重定向运算符。