标题: [文本处理] 【已解决】批处理命令 dir 区分大小写吗? [打印本页]
作者: lovekix 时间: 2024-9-1 12:56 标题: 【已解决】批处理命令 dir 区分大小写吗?
本帖最后由 lovekix 于 2024-9-3 10:29 编辑
- for /f "delims=" %%i in ('dir /b /s /a-d^|findstr "ar-SA"') do del /a /f /q "%%i"
复制代码
- for /f "delims=" %%i in ('dir /b /s /a-d^|findstr "ar-sa"') do del /a /f /q "%%i"
复制代码
第一问: 有必要 写两行吗?
第二问:如果 要是很多 怎么才能 减少运行时间- pushd C:
- for /f "delims=" %%i in ('dir /b /s /a-d^|findstr "af-ZA"') do del /a /f /q "%%i"
- for /f "delims=" %%i in ('dir /b /s /a-d^|findstr "am-ET"') do del /a /f /q "%%i"
- for /f "delims=" %%i in ('dir /b /s /a-d^|findstr "ar-SA"') do del /a /f /q "%%i"
- for /f "delims=" %%i in ('dir /b /s /a-d^|findstr "as-IN"') do del /a /f /q "%%i"
- for /f "delims=" %%i in ('dir /b /s /a-d^|findstr "az-Latn-AZ"') do del /a /f /q "%%i"
- for /f "delims=" %%i in ('dir /b /s /a-d^|findstr "bg-BG"') do del /a /f /q "%%i"
- for /f "delims=" %%i in ('dir /b /s /a-d^|findstr "bn-IN"') do del /a /f /q "%%i"
- for /f "delims=" %%i in ('dir /b /s /a-d^|findstr "bs-Latn-BA"') do del /a /f /q "%%i"
- for /f "delims=" %%i in ('dir /b /s /a-d^|findstr "ca-Es-VALENCIA"') do del /a /f /q "%%i"
- for /f "delims=" %%i in ('dir /b /s /a-d^|findstr "ca-ES"') do del /a /f /q "%%i"
- for /f "delims=" %%i in ('dir /b /s /a-d^|findstr "cs-CZ"') do del /a /f /q "%%i"
- for /f "delims=" %%i in ('dir /b /s /a-d^|findstr "cy-GB"') do del /a /f /q "%%i"
- for /f "delims=" %%i in ('dir /b /s /a-d^|findstr "da-DK"') do del /a /f /q "%%i"
- for /f "delims=" %%i in ('dir /b /s /a-d^|findstr "de-DE"') do del /a /f /q "%%i"
- for /f "delims=" %%i in ('dir /b /s /a-d^|findstr "el-GR"') do del /a /f /q "%%i"
- for /f "delims=" %%i in ('dir /b /s /a-d^|findstr "en-GB"') do del /a /f /q "%%i"
- for /f "delims=" %%i in ('dir /b /s /a-d^|findstr "en-AU"') do del /a /f /q "%%i"
- for /f "delims=" %%i in ('dir /b /s /a-d^|findstr "en-CA"') do del /a /f /q "%%i"
- for /f "delims=" %%i in ('dir /b /s /a-d^|findstr "en-IN"') do del /a /f /q "%%i"
- for /f "delims=" %%i in ('dir /b /s /a-d^|findstr "en-GB"') do del /a /f /q "%%i"
-
- for /f "delims=" %%i in ('dir /b /s /a-d^|findstr "es-ES"') do del /a /f /q "%%i"
- for /f "delims=" %%i in ('dir /b /s /a-d^|findstr "es-MX"') do del /a /f /q "%%i"
- for /f "delims=" %%i in ('dir /b /s /a-d^|findstr "et-EE"') do del /a /f /q "%%i"
- for /f "delims=" %%i in ('dir /b /s /a-d^|findstr "eu-ES"') do del /a /f /q "%%i"
- for /f "delims=" %%i in ('dir /b /s /a-d^|findstr "fa-IR"') do del /a /f /q "%%i"
- for /f "delims=" %%i in ('dir /b /s /a-d^|findstr "fi-FI"') do del /a /f /q "%%i"
- for /f "delims=" %%i in ('dir /b /s /a-d^|findstr "fil-PH"') do del /a /f /q "%%i"
- for /f "delims=" %%i in ('dir /b /s /a-d^|findstr "fr-CA"') do del /a /f /q "%%i"
- for /f "delims=" %%i in ('dir /b /s /a-d^|findstr "fr-FR"') do del /a /f /q "%%i"
- for /f "delims=" %%i in ('dir /b /s /a-d^|findstr "ga-IE"') do del /a /f /q "%%i"
- for /f "delims=" %%i in ('dir /b /s /a-d^|findstr "gd-gb"') do del /a /f /q "%%i"
- for /f "delims=" %%i in ('dir /b /s /a-d^|findstr "gl-ES"') do del /a /f /q "%%i"
- for /f "delims=" %%i in ('dir /b /s /a-d^|findstr "gu-IN"') do del /a /f /q "%%i"
- for /f "delims=" %%i in ('dir /b /s /a-d^|findstr "he-IL"') do del /a /f /q "%%i"
- for /f "delims=" %%i in ('dir /b /s /a-d^|findstr "hi-IN"') do del /a /f /q "%%i"
- for /f "delims=" %%i in ('dir /b /s /a-d^|findstr "hr-HR"') do del /a /f /q "%%i"
- for /f "delims=" %%i in ('dir /b /s /a-d^|findstr "hu-HU"') do del /a /f /q "%%i"
- for /f "delims=" %%i in ('dir /b /s /a-d^|findstr "hy-AM"') do del /a /f /q "%%i"
- for /f "delims=" %%i in ('dir /b /s /a-d^|findstr "id-ID"') do del /a /f /q "%%i"
- for /f "delims=" %%i in ('dir /b /s /a-d^|findstr "is-IS"') do del /a /f /q "%%i"
- for /f "delims=" %%i in ('dir /b /s /a-d^|findstr "it-IT"') do del /a /f /q "%%i"
- for /f "delims=" %%i in ('dir /b /s /a-d^|findstr "ja-JP"') do del /a /f /q "%%i"
- for /f "delims=" %%i in ('dir /b /s /a-d^|findstr "ka-GE"') do del /a /f /q "%%i"
- for /f "delims=" %%i in ('dir /b /s /a-d^|findstr "kk-KZ"') do del /a /f /q "%%i"
- for /f "delims=" %%i in ('dir /b /s /a-d^|findstr "km-KH"') do del /a /f /q "%%i"
- for /f "delims=" %%i in ('dir /b /s /a-d^|findstr "kn-IN"') do del /a /f /q "%%i"
- for /f "delims=" %%i in ('dir /b /s /a-d^|findstr "ko-KR"') do del /a /f /q "%%i"
- for /f "delims=" %%i in ('dir /b /s /a-d^|findstr "kok-IN"') do del /a /f /q "%%i"
- for /f "delims=" %%i in ('dir /b /s /a-d^|findstr "lb-LU"') do del /a /f /q "%%i"
- for /f "delims=" %%i in ('dir /b /s /a-d^|findstr "lo-LA"') do del /a /f /q "%%i"
- for /f "delims=" %%i in ('dir /b /s /a-d^|findstr "lt-LT"') do del /a /f /q "%%i"
- for /f "delims=" %%i in ('dir /b /s /a-d^|findstr "lv-LV"') do del /a /f /q "%%i"
- for /f "delims=" %%i in ('dir /b /s /a-d^|findstr "mi-NZ"') do del /a /f /q "%%i"
- for /f "delims=" %%i in ('dir /b /s /a-d^|findstr "mk-MK"') do del /a /f /q "%%i"
- for /f "delims=" %%i in ('dir /b /s /a-d^|findstr "ml-IN"') do del /a /f /q "%%i"
- for /f "delims=" %%i in ('dir /b /s /a-d^|findstr "mr-IN"') do del /a /f /q "%%i"
- for /f "delims=" %%i in ('dir /b /s /a-d^|findstr "ms-MY"') do del /a /f /q "%%i"
- for /f "delims=" %%i in ('dir /b /s /a-d^|findstr "mt-MT"') do del /a /f /q "%%i"
- for /f "delims=" %%i in ('dir /b /s /a-d^|findstr "nb-NO"') do del /a /f /q "%%i"
- for /f "delims=" %%i in ('dir /b /s /a-d^|findstr "ne-NP"') do del /a /f /q "%%i"
- for /f "delims=" %%i in ('dir /b /s /a-d^|findstr "nl-NL"') do del /a /f /q "%%i"
- for /f "delims=" %%i in ('dir /b /s /a-d^|findstr "nn-NO"') do del /a /f /q "%%i"
- for /f "delims=" %%i in ('dir /b /s /a-d^|findstr "or-IN"') do del /a /f /q "%%i"
- for /f "delims=" %%i in ('dir /b /s /a-d^|findstr "pa-IN"') do del /a /f /q "%%i"
- for /f "delims=" %%i in ('dir /b /s /a-d^|findstr "pl-PL"') do del /a /f /q "%%i"
- for /f "delims=" %%i in ('dir /b /s /a-d^|findstr "pt-BR"') do del /a /f /q "%%i"
- for /f "delims=" %%i in ('dir /b /s /a-d^|findstr "pt-PT"') do del /a /f /q "%%i"
- for /f "delims=" %%i in ('dir /b /s /a-d^|findstr "quz-PE"') do del /a /f /q "%%i"
- for /f "delims=" %%i in ('dir /b /s /a-d^|findstr "ro-RO"') do del /a /f /q "%%i"
- for /f "delims=" %%i in ('dir /b /s /a-d^|findstr "ru-RU"') do del /a /f /q "%%i"
- for /f "delims=" %%i in ('dir /b /s /a-d^|findstr "sk-SK"') do del /a /f /q "%%i"
- for /f "delims=" %%i in ('dir /b /s /a-d^|findstr "sl-SI"') do del /a /f /q "%%i"
- for /f "delims=" %%i in ('dir /b /s /a-d^|findstr "sq-AL"') do del /a /f /q "%%i"
- for /f "delims=" %%i in ('dir /b /s /a-d^|findstr "sr-Cyrl-BA"') do del /a /f /q "%%i"
- for /f "delims=" %%i in ('dir /b /s /a-d^|findstr "sr-Cyrl-RS"') do del /a /f /q "%%i"
- for /f "delims=" %%i in ('dir /b /s /a-d^|findstr "sr-Latn-RS"') do del /a /f /q "%%i"
- for /f "delims=" %%i in ('dir /b /s /a-d^|findstr "sv-SE"') do del /a /f /q "%%i"
- for /f "delims=" %%i in ('dir /b /s /a-d^|findstr "ta-IN"') do del /a /f /q "%%i"
- for /f "delims=" %%i in ('dir /b /s /a-d^|findstr "te-IN"') do del /a /f /q "%%i"
- for /f "delims=" %%i in ('dir /b /s /a-d^|findstr "th-TH"') do del /a /f /q "%%i"
- for /f "delims=" %%i in ('dir /b /s /a-d^|findstr "tr-TR"') do del /a /f /q "%%i"
- for /f "delims=" %%i in ('dir /b /s /a-d^|findstr "tt-RU"') do del /a /f /q "%%i"
- for /f "delims=" %%i in ('dir /b /s /a-d^|findstr "ug-CN"') do del /a /f /q "%%i"
- for /f "delims=" %%i in ('dir /b /s /a-d^|findstr "uk-UA"') do del /a /f /q "%%i"
- for /f "delims=" %%i in ('dir /b /s /a-d^|findstr "ur-PK"') do del /a /f /q "%%i"
- for /f "delims=" %%i in ('dir /b /s /a-d^|findstr "uz-Latn-UZ"') do del /a /f /q "%%i"
- for /f "delims=" %%i in ('dir /b /s /a-d^|findstr "vi-VN"') do del /a /f /q "%%i"
-
- for /f "delims=" %%i in ('dir /b /s /a-d^|findstr "zh-TW"') do del /a /f /q "%%i"
- 删除了小写的
- PAUSE
复制代码
作者: aloha20200628 时间: 2024-9-1 13:02
本帖最后由 aloha20200628 于 2024-9-1 13:17 编辑
第一问》findstr 加 /i 参数即可- for /f "delims=" %%i in ('dir /b /s /a-d^|findstr /i "ar-sa"') do del /a /f /q "%%i"
复制代码
第二问》可将所有搜索字段 "a..." 至 "z..." 逐行复制到以下代码第2至第7行之间即可- @echo off
- for %%c in (
- "af-ZA"
- "am-ET"
- .....
- "zh-TW"
- ) do (for /f "delims=" %%i in ('dir /b /s /a-d^|findstr /i %%c') do del /a /f /q "%%i")
- pause&exit/b
复制代码
作者: lovekix 时间: 2024-9-1 13:16
回复 2# aloha20200628 - @echo off
- for %%c in (
- "af-ZA"
- "am-ET"
- .......
- "zh-TW"
- ) do (for /f "delims=" %%i in ('dir /b /s /a-d^|findstr /i %%c') do del /a /f /q "%%i")
- pause&exit/b
复制代码
要是 想把文件夹和文件都删除 是不是 只要去掉 /a-d
作者: aloha20200628 时间: 2024-9-1 13:25
本帖最后由 aloha20200628 于 2024-9-1 13:27 编辑
回复 3# lovekix
删除文件用 del
删除目录用 rd
但有可能目录中包含与目录名搜索词不匹配的文件...
可在命令行分别用 del /? 和 rd /? 查看用法详解
作者: lovekix 时间: 2024-9-1 13:29
回复 4# aloha20200628
对对对 忘记了
这样对吗- ) do (for /f "delims=" %%i in ('dir /b /s /ad^|findstr /i %%c') do rd /s/q "%%i")
- pause&exit/b
复制代码
作者: lovekix 时间: 2024-9-1 13:45
本帖最后由 lovekix 于 2024-9-1 14:00 编辑
-------------
作者: aloha20200628 时间: 2024-9-1 13:54
本帖最后由 aloha20200628 于 2024-9-1 14:06 编辑
回复 5# lovekix
可以。但其实 dir /b /s /a-d^|findstr /i "ar-sa" 还可以简化如下
dir /b /s /a-d "*ar-sa*"
dir /b /s /ad "*ar-sa*"
dir 不区分路径文件名大小写
用 dir /b/s ... 搜索匹配的结果是全路径文件名/目录名,可直接交付给 del/rd 操作,没必要再用 pushd ...
作者: lovekix 时间: 2024-9-1 15:19
回复 lovekix
可以。但其实 dir /b /s /a-d^|findstr /i "ar-sa" 还可以简化如下
dir /b /s / ...
aloha20200628 发表于 2024-9-1 13:54
可以 吧ar-sa .....
写到一个 config.ini 里面 吗?
作者: aloha20200628 时间: 2024-9-1 16:07
本帖最后由 aloha20200628 于 2024-9-1 16:13 编辑
回复 8# lovekix
如果 config.ini 文件每行内容如下:
af-ZA
...
zh-TW
可用以下代码- @echo off & for /f "delims=" %%c in (config.ini) do (
- for /f "delims=" %%i in ('dir /b /s /a-d "*%%c*" ') do del /a /f /q "%%i"
- )
- pause&exit/b
复制代码
作者: WHY 时间: 2024-9-1 17:15
本帖最后由 WHY 于 2024-9-1 17:36 编辑
windows 文件系统本身是不区分大小写的,dir 如果区分大小写就没意义了。
del 删除文件时,支持搜索子目录,支持通配符。
dir + findstr + del ,或者 dir + del 都是多此一举。- del /s /a /f /q *af-ZA* *am-ET* *ar-SA* *bg-BG* *az-Latn-AZ*
复制代码
可以添加很多关键字,只要命令总长度不超过 8192 字符就行。
rd 删除目录需要 dir 辅助,因为子目录必须 sort /r
作者: 77七 时间: 2024-9-1 18:18
楼主可以添加点文字描述,不要以代码代表...
楼主代码中的 ar-SA 指的是文件还是文件夹?
作者: lovekix 时间: 2024-9-1 18:50
回复 11# 77七
又有文件夹 又有文件
作者: lovekix 时间: 2024-9-1 19:03
回复 10# WHY - ar-sa
- af-za
- am-et
- as-in
- az-latn-az
- arab~und-arab
- bg-bg
- bn-in
- bs-latn-ba
- ba-ru
- be-by
- bn-bd
- beng~und-beng
复制代码
我把 这些放在了 config.ini文件里面了
怎么才能快速的删除 包含 这些的文件夹和文件
作者: aloha20200628 时间: 2024-9-1 19:56
本帖最后由 aloha20200628 于 2024-9-1 20:10 编辑
回复 8# lovekix
稳妥起见(避免搜索文件与搜索目录仅为部分交集而有漏删),先遍历各目录删除所有包含指定搜索词的文件,再遍历各目录删除所有包含同一搜索词的目录及其子目录,利用 rd 命令的容错性,任其自行处理即可...
- @echo off & for /f "delims=" %%c in (config.ini) do (
- for /f "delims=" %%F in ('dir /b/s/a-d "*%%c*" ') do del /f/q "%%F"
- for /f "delims=" %%D in ('dir /b/s/ad "*%%c*" ') do rd /s/q "%%D"
- ) 2>nul
- pause&exit/b
复制代码
作者: WHY 时间: 2024-9-1 20:37
多个关键词同时遍历,显然更快更科学;先删目录,再删文件,显然更快更科学。- @echo off
- setlocal enabledelayedexpansion
- for /f "tokens=*" %%i in (config.ini) do (
- set key=!key! "*%%i*"
- )
- endlocal & set key=%key%
-
- for /f "delims=" %%i in ('dir /b /ad /s %key% ^| sort /r') do (
- rd /s /q "%%i"
- )
- del /s /a /f /q %key%
- pause
复制代码
作者: aloha20200628 时间: 2024-9-1 20:49
回复 12# lovekix
如果被删除的目标目录包含所有被删除的目标文件,则14楼代码可删除第2行;若非也,则可调换2,3行序,确实可提高整体删除效率...
作者: 77七 时间: 2024-9-1 21:00
- @echo off
- cd /d c:\
- for /f "delims=" %%i in ('dir /a /b /s ^|findstr /ig:"config.ini"') do (
- if exist "%%i\" (
- echo rd /s /q "%%i"
- ) else if exist "%%i" (
- echo del /a /f "%%i"
- )
- )
- pause
复制代码
作者: aloha20200628 时间: 2024-9-1 21:48
本帖最后由 aloha20200628 于 2024-9-2 09:19 编辑
充分利用 rd 和 del 的容错性,还可进一步简化操作及检测步骤...
- @echo off & for /f "delims=" %%c in (config.ini) do (for /f "delims=" %%a in ('dir /b/s "*%%c*" ') do (
- rd /s/q "%%a"
- del /f/q "%%a"
- )) 2>nul
- pause&exit/b
复制代码
作者: WHY 时间: 2024-9-2 10:40
有10个框,每个筐装10个球,需要找出并扔掉压破的、压瘪的球和框,两种办法:
办法1:
1.从第1个框(目录)开始,找出框中压破了的球(文件),扔掉;直到10个框的球都找遍;
2.重复第1步,找出框中压瘪了的球(文件),扔掉;直到10个框的球都找遍;
3.从第1个框(目录)开始,找到压破了的框,扔掉;直到10个框都找遍;
4.重复第3步,找出压瘪了的框,扔掉;直到所有框都找遍。
办法2:
1.从第1个框(目录)开始,找到破框或瘪框,扔掉,直到10个框都找遍;
2.从第1个框(目录)开始,找到破球或瘪球(文件),扔掉,直到所有球都找遍。
只要有正常逻辑思维的人,一般会选择办法2;
也有人偏不信邪,非办法1不选,其思维、逻辑总是超乎常人,bat新手老手一个比一个懵逼;
我一般不愿把人往坏处想,就当这是为了彰显其独特的个性与魅力吧。
作者: qixiaobin0715 时间: 2024-9-2 10:53
生动!!!!!!!
作者: lovekix 时间: 2024-9-3 06:52
本帖最后由 lovekix 于 2024-9-3 10:30 编辑
回复 15# WHY
PE不支持 sort
我提取了一个 sort 都删除完了 很完美
https://wwrj.lanzouw.com/iD7v4290xbpg
用时1分25秒- @echo off
- setlocal enabledelayedexpansion
- for /f "tokens=*" %%i in (config.ini) do (
- set key=!key! "*%%i*"
- )
- endlocal & set key=%key%
-
- for /f "delims=" %%i in ('dir /b /ad /s %key% ^| sort /r') do (
- rd /s /q "%%i"
- )
- del /s /a /f /q %key%
- pause
复制代码
作者: lovekix 时间: 2024-9-3 06:58
本帖最后由 lovekix 于 2024-9-3 07:00 编辑
回复 17# 77七
10秒就搞定了
但是删的不全 文件夹删除了 文件还保留
作者: lovekix 时间: 2024-9-3 07:53
回复 18# aloha20200628
用时3分40秒
作者: 77七 时间: 2024-9-3 08:46
回复 22# lovekix
看了你的反馈,未删除的文件 都位于 "C:\Windows" 下
- @echo off
- cd /d "%~dp0"
- for /f "delims=" %%i in ('dir /a /b /s "c:\" "C:\Windows\" ^|findstr /ig:"config.ini"') do (
- if exist "%%i\" (
- echo rd /s /q "%%i"
- ) else if exist "%%i" (
- echo del /a /f "%%i"
- )
- )
- pause
复制代码
作者: lovekix 时间: 2024-9-3 08:54
回复 24# 77七
效果一样 还是只删除了 文件夹
作者: 77七 时间: 2024-9-3 09:00
回复 25# lovekix
其它目录下的文件删除了吗?有没有报错信息?
作者: lovekix 时间: 2024-9-3 09:23
回复 26# 77七
没有删除 其他目录
没有报错
作者: aloha20200628 时间: 2024-9-3 12:31
本帖最后由 aloha20200628 于 2024-9-3 12:34 编辑
回复 23# lovekix
分两步也许可提速》先 rd 完成 ‘大量的集团’ 清理,其后 del 再完成 ‘少量剩余的单兵’ 清理,二者没有重复操作,订正代码如下...
- @echo off
- for /f "delims=" %%c in (config.ini) do (for /f "delims=" %%a in ('dir /b/s "*%%c*" ') do rd /s/q "%%a") 2>nul
- for /f "delims=" %%c in (config.ini) do (for /f "delims=" %%a in ('dir /b/s "*%%c*" ') do del /f/q "%%a") 2>nul
- pause&exit/b
复制代码
作者: 77七 时间: 2024-9-3 14:42
本帖最后由 77七 于 2024-9-3 14:52 编辑
回复 27# lovekix
这样试下,如果还是不行,检查 list_all.txt 及 list_del.txt 是否包含未删除的文件。
- @echo off
- cd /d "%~dp0"
- set keys=config.ini
-
- (for /f "useback" %%a in ("%keys%") do (
- echo %%a
- )) > "list_keys.txt"
- dir /a /b /s "c:\" "c:\windows" > "list_all.txt"
- findstr /ig:"list_keys.txt" "list_all.txt" > "list_del.txt"
- for /f "useback delims=" %%i in ("list_del.txt") do (
- if exist "%%i\" (
- rd /s /q "%%i"
- ) else if exist "%%i" (
- del /a /f "%%i"
- )
- )
- rem del list_*.txt
- pause
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |