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


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

TOP

回复 6# xp3000


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

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

TOP

回复 6# xp3000


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

TOP

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

TOP

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

TOP

回复 14# qixiaobin0715


   对,^ $ 更严谨些

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

回复 12# newswan

1,
非常感谢!


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

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

回复 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

回复 40# qixiaobin0715


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

TOP

回复 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

回复 42# smatenchen


用什么都一样,这个只是表示标识的存在与否,更直白地说是这个标识“有值”和“无值”的问题

TOP

回复 43# hfxiang

1,
非常感谢!


2,
鄙人分析代码时,感觉=true只是起一个标记的意义。
现在,你把它证实了。


3,
说实在的,把解法代码写成这些做判断的代码会比写成用 | 连接的代码,其运行时会更有效率吗?

TOP

回复 44# smatenchen


    本人认为更高效,但实际情况你可以用大量一点的数据来测试对,有时还是相信自己的测试比较好!

TOP

返回列表