标题: [文件操作] 修改批处理保留指定字符串开头的文件{已经解决} [打印本页]
作者: lovekix 时间: 2021-6-15 17:21 标题: 修改批处理保留指定字符串开头的文件{已经解决}
本帖最后由 lovekix 于 2021-7-5 08:16 编辑
C:\Windows\servicing\Packages
文件夹下有很多文件
我想 保留指定 开头为 Microsoft-Windows- 的文件
我写了一个 批处理 不知道 问题出在什么地方- for /f "delims=" %%i in ('dir /b /a-d Microsoft-Windows-*') do del /a /f /q %%i
复制代码
作者: lovekix 时间: 2021-6-15 17:39
- for /f "delims=" %%a in ('dir /b /a-d ^|findstr /r /v "Microsoft-Windows-"') do (
- del %%a
复制代码
这样写 保留的 全部包含这些字符的
不是Microsoft-Windows- 开头的
作者: 路过 时间: 2021-6-15 19:14
- @echo off
- setlocal enabledelayedexpansion
- for /f "delims=" %%i in ('dir /b /a-d') do (
- set file=%%~i
- set st=!file:~0,18!
- if "!st!" neq "Microsoft-Windows-" (del /a /f /q %%i)
- )
- pause
- exit
复制代码
作者: lovekix 时间: 2021-6-15 19:47
回复 3# 路过
如果 还需要 保留Package 开头的 怎么在什么地方 添加?
作者: went 时间: 2021-6-15 20:14
确认后,第五行echo改为del- @echo off
- cd /d "C:\Windows\servicing\Packages"
- REM 开头保存字符串,竖线分隔多个
- set "save=Microsoft-Windows-|Package"
- for /f "delims=" %%i in ('dir /b /a-d ^| findstr /b /v "%save:|= %"') do echo %%i
- pause&exit
复制代码
作者: lovekix 时间: 2021-6-15 22:25
本帖最后由 lovekix 于 2021-6-15 22:35 编辑
确认后,第五行echo改为del
went 发表于 2021-6-15 20:14
完美运行
谢谢
只是有1个小缺点 某一个出问题 查找 比较费劲- @echo off
- cd /d "C:\Windows\servicing\Packages"
- REM 开头保存字符串,竖线分隔多个
- set "save=Microsoft-Windows-
- |Package
- |1
- |2
- |4"
- for /f "delims=" %%i in ('dir /b /a-d ^| findstr /b /v "%save:|= %"') do echo %%i
- pause&exit
复制代码
不知道 这样行不行
试了试 不运行
作者: 路过 时间: 2021-6-15 22:42
回复 4# lovekix - @echo off
- setlocal enabledelayedexpansion
- for /f "delims=" %%i in ('dir /b /a-d') do (
- set file=%%~i
- set st=!file:~0,18!
- if "!st!" neq "Microsoft-Windows-" (
- set st=!file:~0,7!
- if "!st!" neq "Package" (
- del /a /f /q %%i
- )
- )
- )
- pause
- exit
复制代码
作者: went 时间: 2021-6-15 22:47
回复 6# lovekix - @echo off
- cd /d "C:\Windows\servicing\Packages"
- 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"
- for /f "delims=" %%i in ('dir /b /a-d ^| findstr /b /v "%save::= %"') do echo %%i
- pause&exit
- REM 开头保存字符串,一行一个
- :list
- Microsoft-Windows-
- Package
复制代码
作者: lovekix 时间: 2021-6-16 10:09
本帖最后由 lovekix 于 2021-6-16 10:33 编辑
回复 8# went - @echo off
- cd /d "C:\Windows\servicing\Packages"
- 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"
- for /f "delims=" %%i in ('dir /b /a-d ^| findstr /b /v "%save::= %"') do del %%i
- pause&exit
- REM 开头保存字符串,一行一个
- :list
- Microsoft-Windows-
- Package
复制代码
好像有问题 一闪就退出了 没有 任何操作
作者: lovekix 时间: 2021-6-16 13:43
回复 7# 路过
[/url] went
是不是 每加一行- if "!st!" neq "Package" (
- del /a /f /q %%i
复制代码
作者: lovekix 时间: 2021-6-16 15:18
回复 8# went
研究半天 还是不行
作者: qixiaobin0715 时间: 2021-6-17 11:39
未测试,del慎用:- @echo off
- set var="Package Microsoft-Windows-"
- cd /d "C:\Windows\servicing\Packages"
- for /f "delims=" %%i in ('dir /b /a-d ^| findstr /bv %var%') do del /a /f /q "%%i"
- 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 - @echo off
- cd /d "C:\Windows\servicing\Packages"
- set "skip=0"
- for /f "delims=:" %%i in ('findstr /b /n ":list" "%~0"') do set "skip=%%i"
- for /f "usebackq skip=%skip% delims=" %%i in ("%~0") do call set "save=%%save%%:%%i"
- for /f "delims=" %%i in ('dir /b /a-d ^| findstr /b /v "%save::= %"') do del %%i
- pause&exit
- REM 开头保存字符串,一行一个
- :list
- Microsoft-Windows-2
- Package
- Microsoft-Windows-Branding
复制代码
感谢 went 完美解决
把 源码发出来 备份 防止丢失
作者: 路过 时间: 2021-6-17 18:27
回复 10# lovekix 差不多吧,前面还要加set st=!file:~0,*!,*代表检测的字符的长度
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |