[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] 求教批处理只保留指定文件夹和文件

1
最近想学点批处·理技巧,现遇到了难题,特来求教!

2
问题
d:\1\ 下有好多文件和文件夹。
只保留以111和222为开头的文件夹,以333和444为开头的文件,
以及所有.ini和.exe文件。

要求
要同时满足上述所有条件。
弃用move命令。
最好别用>1.txt这样的命令。

应该是得用set, for, if, rd, del等命令,
想了好久,未得解法。
现来求教,求指点。
多谢!

标题太乱了!

TOP

没人懂得如何解法吗?

TOP

你提的条件太多了,一次性解决不是不行,还不如分开实现。一次性解决可用:
  1. for /f ... ('dir /b') do (
  2. 这里用if进行判断
  3. ...
  4. )
  5. pause
复制代码

TOP

本帖最后由 qixiaobin0715 于 2021-5-23 08:48 编辑

回复 1# smatenchen
文件和文件夹分别处理,未测试,del/rd慎用:
  1. @echo off
  2. for /f "delims=" %%a in ('dir /b /ad ^|findstr /vb "111 222"') do rd %%a
  3. for /f "delims=" %%b in ('dir /b /a-d ^|findstr /ev ".ini .exe .bat"^|findstr /bv "333 444"') do del %%b
  4. pause
复制代码

TOP

本帖最后由 xp3000 于 2021-5-23 06:45 编辑
  1. @cd /d  d:\1\
  2. @echo off & setlocal EnableDelayedExpansion
  3. for /f "tokens=*" %%i in ('dir /a:d /b *') do (echo 搜索目录"%%i"&echo.
  4.     for /f "delims=" %%j in ('echo %%i^| findstr /i /v "^111 ^222"') do echo 删除非匹配目录"%%j"&echo.&rd "%%j" /s /q
  5.         for /f "delims=" %%k in ('echo %%i^| findstr /i /r /x "^111.* ^222.*"') do (echo 符合要求,即将切换.......
  6.     pushd %%k&echo 切换目录"%%k"
  7.         for /f "delims=" %%l in ('dir /b/a-d/on *.*^| findstr /i /v "^333 ^444"^| findstr /i /v "exe$ ini$"') do (
  8.             echo 搜索到非匹配文件,删除"%%l" & del /f /s /q "%%l"
  9.             )
  10.     popd&echo.退出目录"%%k"&echo.
  11.     rd "%%k" 2>nul&echo 如果"%%k"为空文件夹将删除
  12.         )
  13.     )
  14. )
  15. pause
复制代码

TOP

回复 6# xp3000


    我是初学者,哪里看得懂这么复杂的命令!有空的话,请您详解这些命令的含义。其中!pushd什么的,我根本看不懂啊!

TOP

回复 5# qixiaobin0715


   
我是初学者,看不懂啊!您可以详细说说吗?

TOP

回复 2# 1152


    问题有解吗?

TOP

回复 4# qixiaobin0715


   
应该是吧!
我是初学者,不知如何解,特来求教啊!

TOP

回复 5# qixiaobin0715


   
不怕!
我专门用来测试的,删了也没事。

TOP

  1. for /f "delims=" %%a in ('dir /b /ad ^|findstr /r /v "<111 <222"') do (
  2.     rd /s %%a
  3. )
  4. for /f "delims=" %%a in ('dir /b /a-d ^|findstr /r /v "<333 <444 .ini> .exe>"') do (
  5.      del %%a
  6. )
复制代码

TOP

回复 7# smatenchen
添加了注释,也清晰了,昨天比较混乱

TOP

回复 12# newswan
表达单词的起始位置和结束位置,少了一个反斜杠。
还是用^和$要严谨些,如果文件名是“abc 333.txt” 哪?

TOP

回复 8# smatenchen
具体可以看看http://bbs.bathome.net/thread-14682-1-1.html

TOP

返回列表