找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 21592|回复: 1

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

[复制链接]
发表于 2018-12-11 04:01:55 | 显示全部楼层 |阅读模式
本帖最后由 七剑下面条 于 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. )
  64. pause >nul
复制代码
发表于 2018-12-11 08:46:56 | 显示全部楼层
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 了,而且 万一需求就是目录要变化,直接改这个配置文件就行,代码是不用动的。

评分

参与人数 1技术 +1 收起 理由
七剑下面条 + 1 感谢

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 20:51 , Processed in 0.016672 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表