Board logo

标题: [文件操作] 修改批处理保留指定字符串开头的文件{已经解决} [打印本页]

作者: lovekix    时间: 2021-6-15 17:21     标题: 修改批处理保留指定字符串开头的文件{已经解决}

本帖最后由 lovekix 于 2021-7-5 08:16 编辑

C:\Windows\servicing\Packages  

文件夹下有很多文件

我想 保留指定 开头为 Microsoft-Windows- 的文件

我写了一个 批处理  不知道 问题出在什么地方
  1. for /f "delims=" %%i in ('dir /b /a-d Microsoft-Windows-*') do del /a /f /q %%i
复制代码

作者: lovekix    时间: 2021-6-15 17:39

  1. for /f "delims=" %%a in ('dir /b /a-d ^|findstr /r /v "Microsoft-Windows-"') do (
  2.      del %%a
复制代码
这样写   保留的 全部包含这些字符的

不是Microsoft-Windows-  开头的
作者: 路过    时间: 2021-6-15 19:14

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%i in ('dir /b /a-d') do (
  4. set file=%%~i
  5. set st=!file:~0,18!
  6. if "!st!" neq "Microsoft-Windows-" (del /a /f /q %%i)
  7. )
  8. pause
  9. exit
复制代码

作者: lovekix    时间: 2021-6-15 19:47

回复 3# 路过


    如果  还需要  保留Package   开头的  怎么在什么地方 添加?
作者: went    时间: 2021-6-15 20:14

确认后,第五行echo改为del
  1. @echo off
  2. cd /d "C:\Windows\servicing\Packages"
  3. REM 开头保存字符串,竖线分隔多个
  4. set "save=Microsoft-Windows-|Package"
  5. for /f "delims=" %%i in ('dir /b /a-d ^| findstr /b /v "%save:|= %"') do echo %%i
  6. pause&exit
复制代码

作者: lovekix    时间: 2021-6-15 22:25

本帖最后由 lovekix 于 2021-6-15 22:35 编辑
确认后,第五行echo改为del
went 发表于 2021-6-15 20:14



完美运行

    谢谢
只是有1个小缺点   某一个出问题  查找 比较费劲
  1. @echo off
  2. cd /d "C:\Windows\servicing\Packages"
  3. REM 开头保存字符串,竖线分隔多个
  4. set "save=Microsoft-Windows-
  5. |Package
  6. |1
  7. |2
  8. |4"
  9. for /f "delims=" %%i in ('dir /b /a-d ^| findstr /b /v "%save:|= %"') do echo %%i
  10. pause&exit
复制代码
不知道 这样行不行

试了试 不运行
作者: 路过    时间: 2021-6-15 22:42

回复 4# lovekix
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%i in ('dir /b /a-d') do (
  4. set file=%%~i
  5. set st=!file:~0,18!
  6. if "!st!" neq "Microsoft-Windows-" (
  7. set st=!file:~0,7!
  8. if "!st!" neq "Package" (
  9. del /a /f /q %%i
  10. )
  11. )
  12. )
  13. pause
  14. exit
复制代码

作者: went    时间: 2021-6-15 22:47

回复 6# lovekix
  1. @echo off
  2. cd /d "C:\Windows\servicing\Packages"
  3. for /f "delims=:" %%i in ('findstr /b /n ":list" "%~0"') do for /f "delims=" %%a in ('more +%%i "%~0"') do call set "save=%%save%%:%%a"
  4. for /f "delims=" %%i in ('dir /b /a-d ^| findstr /b /v "%save::= %"') do echo %%i
  5. pause&exit
  6. REM 开头保存字符串,一行一个
  7. :list
  8. Microsoft-Windows-
  9. Package
复制代码

作者: lovekix    时间: 2021-6-16 10:09

本帖最后由 lovekix 于 2021-6-16 10:33 编辑

回复 8# went
  1. @echo off
  2. cd /d "C:\Windows\servicing\Packages"
  3. for /f "delims=:" %%i in ('findstr /b /n ":list" "%~0"') do for /f "delims=" %%a in ('more +%%i "%~0"') do call set "save=%%save%%:%%a"
  4. for /f "delims=" %%i in ('dir /b /a-d ^| findstr /b /v "%save::= %"') do del %%i
  5. pause&exit
  6. REM 开头保存字符串,一行一个
  7. :list
  8. Microsoft-Windows-
  9. Package
复制代码
好像有问题    一闪就退出了  没有 任何操作
作者: lovekix    时间: 2021-6-16 13:43

回复 7# 路过
[/url] went

    是不是  每加一行
  1. if "!st!" neq "Package" (
  2. del /a /f /q %%i
复制代码

作者: lovekix    时间: 2021-6-16 15:18

回复 8# went


    研究半天   还是不行
作者: qixiaobin0715    时间: 2021-6-17 11:39

未测试,del慎用:
  1. @echo off
  2. set var="Package Microsoft-Windows-"
  3. cd /d "C:\Windows\servicing\Packages"
  4. for /f "delims=" %%i in ('dir /b /a-d ^| findstr /bv %var%') do del /a /f /q "%%i"
  5. pause
复制代码

作者: went    时间: 2021-6-17 12:17

回复 9# lovekix

要保存ansi编码
作者: lovekix    时间: 2021-6-17 12:38

回复 13# went


    是ansi编码  



作者: lovekix    时间: 2021-6-17 12:39

回复 12# qixiaobin0715


    这个 不行     这个运行的是   包含这些字符的     不是开头的
作者: went    时间: 2021-6-17 12:45

回复 14# lovekix


    我这儿不会闪退,有没有截图
作者: lovekix    时间: 2021-6-17 12:51

本帖最后由 lovekix 于 2021-6-17 13:08 编辑

回复 16# went


    就是一闪  什么也没有  我录了屏  不知道 怎么发
作者: went    时间: 2021-6-17 12:55

回复 17# lovekix


    你可以点我头像加我qq
作者: lovekix    时间: 2021-6-17 12:56

本帖最后由 lovekix 于 2021-6-17 13:30 编辑

回复 18# went
  1. @echo off
  2. cd /d "C:\Windows\servicing\Packages"
  3. set "skip=0"
  4. for /f "delims=:" %%i in ('findstr /b /n ":list" "%~0"') do set "skip=%%i"
  5. for /f "usebackq skip=%skip% delims=" %%i in ("%~0") do call set "save=%%save%%:%%i"
  6. for /f "delims=" %%i in ('dir /b /a-d ^| findstr /b /v "%save::= %"') do del %%i
  7. pause&exit
  8. REM 开头保存字符串,一行一个
  9. :list
  10. Microsoft-Windows-2
  11. Package
  12. Microsoft-Windows-Branding
复制代码
感谢  went   完美解决

把  源码发出来  备份  防止丢失
作者: 路过    时间: 2021-6-17 18:27

回复 10# lovekix 差不多吧,前面还要加set st=!file:~0,*!,*代表检测的字符的长度




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