Board logo

标题: [文本处理] 【已解决】批处理如何使用for循环语句精简代码? [打印本页]

作者: 七剑下面条    时间: 2018-12-11 04:01     标题: 【已解决】批处理如何使用for循环语句精简代码?

本帖最后由 七剑下面条 于 2018-12-11 13:35 编辑

如题,我有一个代码删除除标记文件夹外的指定文件夹,但是代码太麻烦了,能精简一下吗
  1. @echo off&SETLOCAL enabledelayedexpansion
  2. rem 要排除的文件夹名字放在exception变量里面,使用“;”分割
  3. set "exception=$RECYCLE.BIN;Documents and Settings;Program Files;Program Files (x86);ProgramData;Recovery;System Volume Information;Users;Windows;efi;boot;PerfLogs;msocache"
  4. for /f "delims=" %%a in ('dir G:\ /ad /b') do (
  5. rem bool重新赋值标志删除,false为不删除标志
  6. set bool=true
  7. for /f "delims=; tokens=1-13" %%i in ("%exception%") do (
  8. if "%%a"=="%%i" (
  9. set bool=false
  10. break
  11. )
  12. if "%%a"=="%%j" (
  13. set bool=false
  14. break
  15. )
  16. if "%%a"=="%%k" (
  17. set bool=false
  18. break
  19. )
  20. if "%%a"=="%%l" (
  21. set bool=false
  22. break
  23. )
  24. if "%%a"=="%%m" (
  25. set bool=false
  26. break
  27. )
  28. if "%%a"=="%%n" (
  29. set bool=false
  30. break
  31. )
  32. if "%%a"=="%%o" (
  33. set bool=false
  34. break
  35. )
  36. if "%%a"=="%%p" (
  37. set bool=false
  38. break
  39. )
  40. if "%%a"=="%%q" (
  41. set bool=false
  42. break
  43. )
  44. if "%%a"=="%%r" (
  45. set bool=false
  46. break
  47. )
  48. if "%%a"=="%%s" (
  49. set bool=false
  50. break
  51. )
  52. if "%%a"=="%%t" (
  53. set bool=false
  54. break
  55. )
  56. if "%%a"=="%%u" (
  57. set bool=false
  58. break
  59. )
  60. )
  61. if !bool!==true echo %%a,!bool!
  62. )
  63. pause >nul
复制代码

作者: cfwyy77_bat    时间: 2018-12-11 08:46

for不止一种 /f 的用法。按你这种用法  排除100个目录是不是得疯
就用最基本的for 就行了,()是集合,类似:
  1. for %%i in ("$RECYCLE.BIN","Documents and Settings","Program Files") do ...
复制代码
下面的你肯定会了。

其实这种需求我的建议最好是是所有的目录名字一行一个写到个配置文件里比如dirName.txt
  1. $RECYCLE.BIN
  2. Documents and Settings
  3. Program Files
  4. ...
复制代码
这样你就可以用 for /f 了,而且 万一需求就是目录要变化,直接改这个配置文件就行,代码是不用动的。




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2