标题: [文件操作] 如何写批处理获取特定名称和特定属性的文件列表? [打印本页]
作者: sunnyjjsummer 时间: 2008-8-15 14:46 标题: 如何写批处理获取特定名称和特定属性的文件列表?
写一个批处理获取特定文件名称及属性列表。比如说文件名称前四个为英文字母后面四个为数字且为只读属性。
如:abcd1234.* 为只读,则符合。1234abcd.*不符合命名规范。
我知道dir /a:r /b 可以得到只读文件列表,文件名应该怎么处理呢?批处理中通配符的支持不是很懂哎,请教各位大虾。
作者: batman 时间: 2008-8-15 15:30
- @echo off&setlocal enabledelayedexpansion
- for /f "delims=" %%i in ('dir /s /ar /b 路径\*.*') do (
- set "str=%%~ni"
- echo !str:~,4!|findstr /i "[^a-z]">nul&&set "no=a"
- echo !str:~-4!|findstr "[^0-9]">nul&&set "no=a"
- if not defined no echo %%i&set "no="
- )
- pause>nul
复制代码
作者: Batcher 时间: 2008-8-15 15:33
- @echo off
- for /f "tokens=*" %%a in ('dir /a:r /b') do (
- echo %%~na|findstr "^[a-z][a-z][a-z][a-z].*[0-9][0-9][0-9][0-9]$"
- )
复制代码
[ 本帖最后由 Batcher 于 2008-8-15 15:35 编辑 ]
作者: batman 时间: 2008-8-15 19:55
原帖由 Batcher 于 2008-8-15 15:33 发表
@echo off
for /f "tokens=*" %%a in ('dir /a:r /b') do (
echo %%~na|findstr "^[a-z][a-z][a-z][a-z].*[0-9][0-9][0-9][0-9]$"
)
楼上的代码简洁,但是不是忽略了大小写的问题了,findstr后面要加 /i才是。
作者: namejm 时间: 2008-8-15 21:01
再精简一下,以便提高效率:- @echo off
- for /f "tokens=*" %%a in ('dir /a:r /b 2^>nul^|findstr /i "^[a-z][a-z][a-z][a-z].*[0-9][0-9][0-9][0-9]$"') do echo "%%i"
- pause
复制代码
作者: 随风 时间: 2008-8-15 21:06
支持5楼,若非万不得以,实在不赞同2 ,3 楼 对 findstr 这样的用法。
作者: Batcher 时间: 2008-8-15 21:36 标题: 回复 4楼 的帖子
我在测试的时候发现不用/i也可以正确匹配
作者: Batcher 时间: 2008-8-15 21:39 标题: 回复 5楼 的帖子
正解,呵呵。
我开始写那个正则表达式的时候,不小心写错了,后来拆分成两个findstr做测试,最后帖代码的时候忘了放回到括号里面,贻笑大方了。
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |