|
|
楼主 |
发表于 2022-8-29 16:18:20
|
显示全部楼层
本帖最后由 smatenchen 于 2022-8-30 10:10 编辑
回复 33# qixiaobin0715
回复 34# Batcher
回复 12# smss
回复 29# smatenchen
回复 28# hfxiang
{
@echo off
setlocal enabledelayedexpansion
for /f "delims=" %%i in ('dir /b /a-d *.txt') do (
set "n0=!n1!"
set "n1=!n2!"
set "n2=%%i"
del "!n0!"
)
}
1,
非常感谢!
2,
我没看懂其中的逻辑哦!请帮忙细说一下哦!
3,
dir /b /a-d *.txt
列出当前目录下所有txt文件,形成一个清单,在for循环里依次把值交给%%i。
这条代码是把名为xxx.txt的文件夹,都给排除了。后面的del删不动文件夹,
但会占用一次计数,一次循环。这可算是极严谨的做法了。
4,
第1次循环,
n0=!n1!,此时!n1!为空,n0就也为空。
n1=!n2!,此时!n2!为空,n1就也为空。
n2=%%i,此时%%i为1.txt,n2就也为1.txt。
del "!n0!",即删了一个空值。
5,
第2次循环,
n0=!n1!,此时!n1!为空,n0就也为空。
n1=!n2!,此时!n2!为1.txt,n1就也为1.txt。
n2=%%i,此时%%i为2.txt,n2就也为2.txt。
del "!n0!",即删了一个空值。
6,
第3次循环,
n0=!n1!,此时!n1!为1.txt,n0就也为1.txt。
n1=!n2!,此时!n2!为2.txt,n1就也为2.txt。
n2=%%i,此时%%i为3.txt,n2就也为3.txt。
del "!n0!",即删了1.txt。
7,
第4次循环,
del "!n0!",即删了2.txt。
8,
第100次循环,
del "!n0!",即删了98.txt。
9,
牛啊!没想到巧妙在这里啊!谁发明的呢?
10,
依此思路,要排除前面2个而删除其余文件时,也可以用这个解法吗?
现在是用了正向迭代解法,那有没有反向迭代解法的应用例子呢?
似乎不用到第12楼里的或跳行解法,看似不行啊?
11,
依此思路,要排除前面2个和后面2个而删除其余文件时,似乎不加入第12楼里的或跳行解法,
只用正向迭代解法,看似也不行啊?
12,
如果,不知文件总数,要排除前面第1,3,5个和后面倒数第1,3,5个而删除其余文件时,
这又要如何写解法代码呢?我头都大了啊!哈哈!
13,
{
@Echo off&SetLocal EnableDelayedExpansion&set n=0
for /r %%i in (*)do (
if not "%%~nxi"=="%~nx0" (set /a n+=1
if "!n!"=="1" set L=%%i
set J=%%i
)
)
for /r %%i in (*)do if not "%%~nxi"=="%~nx0" if not "%%i"=="!L!" if not "%%i"=="!J!" del/s/q "%%i"
pause
}
这个第12楼里的解法,我总觉得在第2个for循环里有些古怪,可参看我在第29楼的分析。
有大神愿意逐次剖析一下这个第12楼里的解法吗? |
|