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

回复 39# hfxiang

{
@echo off
setlocal enabledelayed
for %%i in (333 444 .ini .exe .bat) do set _%%i=true
for %%i in (111 222) do set #%%i=true
for /f "delims=" %%i in ('dir /b /ad') do (
    set str=%%i
    if not defined #!str:~,3! rd /q /s "%%i"
)
for /f "delims=" %%i in ('dir /b /a-d') do (
    set str=%%i
    if not defined _%%~xi (
        if not defined _!str:~,3! del "%%i"
    )
)
pause
}


1,
非常感谢!


2,
二位的的解题思路,挺广阔啊!


3,
你写的代码里,其中do set _%%i=true,do set #%%i=true里的,=true改成=0或1或false或aa或123,应该都是可以的吧?

TOP

回复 40# qixiaobin0715


学习了一下,虽然没做测试,感觉这些代码对文件夹的处置部分可行,对文件的处置部分有可能工作起来不太顺畅。

TOP

回复 37# smatenchen
有时 简洁≠效率高。
5楼代码在循环体中使用了管道命令,效率就会降低。从楼上代码中受到启示,弃用管道命令,全部使用判断语句,这样效率可能要高一些:
  1. @echo off
  2. setlocal enabledelayed
  3. for %%i in (333 444 .ini .exe .bat) do set _%%i=true
  4. for %%i in (111 222) do set #%%i=true
  5. for /f "delims=" %%i in ('dir /b /ad') do (
  6.     set str=%%i
  7.     if not defined #!str:~,3! rd /q /s "%%i"
  8. )
  9. for /f "delims=" %%i in ('dir /b /a-d') do (
  10.     set str=%%i
  11.     if not defined _%%~xi (
  12.         if not defined _!str:~,3! del "%%i"
  13.     )
  14. )
  15. pause
复制代码

TOP

本帖最后由 hfxiang 于 2022-8-16 20:04 编辑
  1. @echo off
  2. @rem 只保留以 111 和 222 为开头的文件夹,以 333 和 444 为开头的文件,以及所有.ini 和.exe 文件。
  3. @setlocal enableDelayedExpansion
  4. for /f "delims==" %%a in ('set _retain_ 2^>nul') do set "%%a="
  5. set "_retain_Folder_111=True"
  6. set "_retain_Folder_222=True"
  7. set "_retain_File_333=True"
  8. set "_retain_File_444=True"
  9. set "_retain_File_.ini=True"
  10. set "_retain_File_.exe=True"
  11. for /r %%a in (.,*) do (
  12. set "Dir_a=%%~aa"
  13. set "Dir_x=%%~xa"
  14. set "Dir_n=%%~na"
  15. set "Dir_n=!Dir_n:~0,3!"
  16. if /i not "[%cd%]"=="[%%~fa]" if /i not "[%~f0]"=="[%%~fa]" if defined Dir_a if "[!Dir_a:~0,1!]"=="[d]" (
  17. if not defined _retain_Folder_!Dir_n! rd /q/s "%%~fa"
  18. ) else (
  19. set "_retain_File_T="
  20. if defined _retain_File_!Dir_n! set "_retain_File_T=True"
  21. if defined _retain_File_!Dir_x! set "_retain_File_T=True"
  22. if not defined _retain_File_T del/f/s/q "%%~fa"
  23. )
  24. )
  25. endlocal
  26. echo;&pause
  27. exit /b
复制代码

TOP

回复 12# newswan

1,
非常感谢!


2,
你写的代码,其中的<,>,应该是\<xyz,xyz\>。

TOP

回复 6# xp3000 Batcher qixiaobin0715

{
@cd /d  d:\1\


@echo off & setlocal EnableDelayedExpansion
for /f "tokens=*" %%i in ('dir /a:d /b *') do (echo 搜索目录"%%i"&echo.
    for /f "delims=" %%j in ('echo %%i^| findstr /i /v "^111 ^222"') do echo 删除非匹配目录"%%j"&echo.&rd "%%j" /s /q
        for /f "delims=" %%k in ('echo %%i^| findstr /i /r /x "^111.* ^222.*"') do (echo 符合要求,即将切换.......
    pushd %%k&echo 切换目录"%%k"
        for /f "delims=" %%l in ('dir /b/a-d/on *.*^| findstr /i /v "^333 ^444"^| findstr /i /v "exe$ ini$"') do (
            echo 搜索到非匹配文件,删除"%%l" & del /f /s /q "%%l"
            )
    popd&echo.退出目录"%%k"&echo.
    rd "%%k" 2>nul&echo 如果"%%k"为空文件夹将删除
        )
    )
)
pause
}


1,
非常感谢!


2,
以上你写的代码你自己是否测试过呢?


3,
套了这么多层循环,运行效率,速度,肯定不高,将会有一长串运行结果啊!


4,
其运行逻辑,并不够清晰,代码庞杂,纠错时费力。


5,
其运行时会一闪而过,代码里的提示词就显得是多余的了。


6,
与第5楼的代码,实在是没法相提并论。
{
@echo off
for /f "delims=" %%a in ('dir /b /ad ^|findstr /vb "111 222"') do rd %%a
for /f "delims=" %%b in ('dir /b /a-d ^|findstr /ev ".ini .exe .bat"^|findstr /bv "333 444"') do del %%b
pause
}


7,
简单非常重要啊!你把原本简单的搞到极度复杂了!唉!

TOP

回复 14# qixiaobin0715


   对,^ $ 更严谨些

TOP

回复 30# smatenchen
在引号内需转义

TOP

回复 28# smatenchen
变量参数%%a增强
扩充到一个文件扩展名:%%~xa(.txt/.doc ...等)

TOP

回复 6# xp3000


您好!
2>nul
这是什么用法?
多谢!

TOP

回复 6# xp3000


您好!
exe$ ini$
这个是何意?

"^111 ^222"
这是何意?转义?
这是什么用法?
多谢!

TOP

回复 6# xp3000


您好!
pushd popd
这两个起什么作用?
多谢!

TOP

回复 5# qixiaobin0715


   
您好!
('dir /b /ad ^|findstr /vb "111 222"')
这里用^| 是何意?
干嘛要转义?直接用管道 | 接上不行吗?
多谢!

TOP

回复 27# xp3000


   
多谢!
没仔细看,漏看了您的这个语句。
受教了!您费心了!

TOP

回复 21# qixiaobin0715


   
您好!
if "%%~xa"=="" (
这个语句是何意?
%%~xa
这是什么变量?
怎么还带上了~x,是何意?
您好像没先定义出%%~xa这个变量吧?
没看懂,请您解说一下吧!
多谢!

TOP

返回列表