[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
如果是按文件名排序,而其中有涉及到数字序号,有时顺序可能与你所看到会有较大的差异。

TOP

回复 10# smatenchen
代码发上去之后,看楼主没有回应,我想可能对楼主的需求理解错误,所以就将原贴删除了,并且也未留下备份。
代码的主要思路是:
1.前2个for循环利用skip,分别忽略前n个txt文件将其余txt文件名保存在1.log中,忽略后n个txt文件将其余txt文件名保存在2.log中;
2.第3个for循环是利用findstr命令取2个log文件中交集(而非并集),即取掐头去尾后位于中间的txt文件名,利用del命令删除这些文件。
关于楼主几点疑问的回复:
1.此处确实可以不使用变量延迟功能;
2.至于是否会把所有txt文件全部删除,这里不用争论,因为这是一个实践性非常强的知识,试一试即知。并且在上面思路的第2点已经说的很清楚了。
3.我觉得楼主对重定向命令理解是浮在表面。在这里可以举个简单的例子,如果用我上面的代码不好理解,我将for循环中能够显示的内容拆分开来,可能看的较为明白,自己去测试一下:
  1. (
  2. echo,1
  3. echo,2
  4. echo,3
  5. echo,4
  6. echo,5
  7. )>a.txt
复制代码
看看a.txt里的内容是什么?
把上面代码括号中的多行替换成:
  1. (
  2. for /l %%a in (1,1,5) do (
  3. echo,%%a
  4. )
  5. )>a.txt
复制代码
看看2段代码是不是等价的?

TOP

保留前面2个txt文件,删除其余txt文件:
  1. for /f "skip=2 delims=" %%i in ('dir /b /a-d *.txt') do del "%%i"
复制代码
保留后面2个txt文件,删除其余txt文件:
  1. for /f "skip=2 delims=" %%i in ('dir /b /a-d *.txt^|sort /r') do del "%%i"
复制代码

TOP

本帖最后由 qixiaobin0715 于 2022-8-28 08:09 编辑

回复 30# smatenchen
不一定非要使用倒序,使用变量迭代也可以啊。前者更易理解,也较为通用,效率可能也要好点。

TOP

回复 32# smatenchen
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%i in ('dir /b /a-d *.txt') do (
  4.     set "n0=!n1!"
  5.     set "n1=!n2!"
  6.     set "n2=%%i"
  7.     del "!n0!"
  8. )
复制代码

TOP

回复 34# Batcher
对。代码运行时就不会有错误提示。
del /f /q "!f0!" 2>nul
也行!

TOP

有些回帖比较随意,又与其他帖子没什么联系,觉得又没什么用处,就删除掉了,习惯而已。

TOP

本帖最后由 qixiaobin0715 于 2022-8-31 11:10 编辑

回复 37# smatenchen
第12条,用到了临时文件,未测试,不知这样行否:
  1. @echo off
  2. (dir /b /a-d *.txt|findstr /n .*|findstr /b "[135]:"
  3. dir /b /a-d /o-n *.txt|findstr /n .*|findstr /b "[135]:")>a.log
  4. for /f "tokens=2 delims=:" %%i in (a.log) do set _%%i=true
  5. del a.log
  6. for %%i in (*.txt) do (
  7.     if not defined _%%i (
  8.         del /f /q "%%i"
  9.     )
  10. )
复制代码
刚才不小心参数写错了,重新发一遍。

TOP

本帖最后由 qixiaobin0715 于 2022-9-1 12:19 编辑

总感觉这样的问题实际意义不大,只是练练手而已:
  1. @echo off
  2. setlocal enbledelayedexpansion
  3. for %%i in (*.txt) do (
  4.     set /a num+=1
  5.     if !num! gtr 5 (
  6.         set "n0=!n1!"
  7.         set "n1=!n2!"
  8.         set "n2=!n3!"
  9.         set "n3=!n4!"
  10.         set "n4=!n5!"
  11.         set "n5=%%i"
  12.         del "!n0!" 2>nul
  13.     ) else (
  14.         if !num! neq 1 if !num! neq 3 if !num! neq 5 del "%%i"
  15.     )
  16. )
  17. del "!n2!" "!n4!"
复制代码

TOP

繁琐吗?我倒觉得48楼是最好的代码。“既有解法的影响”?没看出来。

TOP

112233...,挥毫指点江山。不要总是猜嘛,把你猜的想法总结为简洁代码,贴出来让大家学习学习。

TOP

返回列表