Board logo

标题: [文件操作] 如何写批处理获取特定名称和特定属性的文件列表? [打印本页]

作者: sunnyjjsummer    时间: 2008-8-15 14:46     标题: 如何写批处理获取特定名称和特定属性的文件列表?

写一个批处理获取特定文件名称及属性列表。比如说文件名称前四个为英文字母后面四个为数字且为只读属性。
如:abcd1234.* 为只读,则符合。1234abcd.*不符合命名规范。

我知道dir /a:r /b 可以得到只读文件列表,文件名应该怎么处理呢?批处理中通配符的支持不是很懂哎,请教各位大虾。
作者: batman    时间: 2008-8-15 15:30

  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in ('dir /s /ar /b 路径\*.*') do (
  3.      set "str=%%~ni"
  4.      echo !str:~,4!|findstr /i "[^a-z]">nul&&set "no=a"
  5.      echo !str:~-4!|findstr "[^0-9]">nul&&set "no=a"
  6.      if not defined no echo %%i&set "no="
  7. )
  8. pause>nul
复制代码

作者: Batcher    时间: 2008-8-15 15:33

  1. @echo off
  2. for /f "tokens=*" %%a in ('dir /a:r /b') do (
  3.   echo %%~na|findstr "^[a-z][a-z][a-z][a-z].*[0-9][0-9][0-9][0-9]$"
  4. )
复制代码

[ 本帖最后由 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

  再精简一下,以便提高效率:
  1. @echo off
  2. 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"
  3. 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