- 帖子
- 181
- 积分
- 206
- 技术
- 0
- 捐助
- 0
- 注册时间
- 2021-5-22
|
本帖最后由 smatenchen 于 2022-8-19 08:51 编辑
回复 39# hfxiang
回复 40# qixiaobin0715
回复 3# Batcher
{
@echo off
@rem 只保留以 111 和 222 为开头的文件夹,以 333 和 444 为开头的文件,以及所有.ini 和.exe 文件。
@setlocal enableDelayedExpansion
for /f "delims==" %%a in ('set _retain_ 2^>nul') do set "%%a="
set "_retain_Folder_111=True"
set "_retain_Folder_222=True"
set "_retain_File_333=True"
set "_retain_File_444=True"
set "_retain_File_.ini=True"
set "_retain_File_.exe=True"
for /r %%a in (.,*) do (
set "Dir_a=%%~aa"
set "Dir_x=%%~xa"
set "Dir_n=%%~na"
set "Dir_n=!Dir_n:~0,3!"
if /i not "[%cd%]"=="[%%~fa]" if /i not "[%~f0]"=="[%%~fa]" if defined Dir_a if "[!Dir_a:~0,1!]"=="[d]" (
if not defined _retain_Folder_!Dir_n! rd /q/s "%%~fa"
) else (
set "_retain_File_T="
if defined _retain_File_!Dir_n! set "_retain_File_T=True"
if defined _retain_File_!Dir_x! set "_retain_File_T=True"
if not defined _retain_File_T del/f/s/q "%%~fa"
)
)
endlocal
echo;&pause
exit /b
}
1,
非常感谢!
2,
你自己测试过你写的这些代码,验证过它有效吗?
3,
set "Dir_a=%%~aa"
这句应该是错的吧?
应该写成 set "Dir_a=%%~da" 或 set "Dir_d=%%~da" 吗?
若是你写错了,那后面引用它时,也该都错了。
4,
for /r %%a in (.,*) do (
这句其中的(.,*),是何意呢?.,*这代表什么呢?是指当前目录下文件名开头处含有.,这两个字符的任何文件吗?
5,
if /i not "[%cd%]"=="[%%~fa]"
这句也不对吧?这个方括号[]起什么作用呢?
当前目录,不等于,%%a的完整路径名?这本来就是不等于的吧?又何必再用if去判断一下呢?
6,
if defined Dir_a
前面不是已经做了定义吗?还要再用if去做判断吗?喏,set "Dir_a=%%~aa" 。
7,
if "[!Dir_a:~0,1!]"=="[d]"
前面的set "Dir_a=%%~aa",应该是定义错了,应该是set "Dir_d=%%~da",
那后面就应该写成if "[!Dir_d:~0,1!]"=="[d]"吧?
8,
还有,
对于有隐藏属性的文件及文件夹,怎么处理呢?
不用dir /a /b命令,它们就是隐形的,for命令本身枚举不了它们。
哈哈!你们考虑过这一问题吗?
9,
另外!
Batcher,
之前,鄙人在查看qixiaobin0715的回复时,点了一下上方蓝色提示条的关闭按钮。
之后,当qixiaobin0715再回复鄙人时,论坛就不再发消息通知鄙人了。
坛主,有办法恢复通知功能吗?
10,
此外!
若需要在for %%a in () ,中的()里是多条带空格的字符串时,用""把带空格的字符串括起来,
但运行时%%a的值也是带了""号的。
如何天然地使它去掉""号,而不是去使用%%~a才办到呢?
若情况变为,需要在for /f %%a in () ,中的()里是多条带空格的字符串时,应该写成怎样的代码呢?
难道是要像Batcher之前那样,在()里套for循环命令,或者是把多条带空格的字符串写入某个文本文件1.text里吗? |
|