[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] 如何写批处理获取特定名称和特定属性的文件列表?

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

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

  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
复制代码
***共同提高***

TOP

  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 编辑 ]
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

原帖由 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才是。
***共同提高***

TOP

  再精简一下,以便提高效率:
  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
复制代码
尺有所短寸有所长,学好批处理没商量;
考虑问题复杂化,解决问题简洁化。

心在天山,身老沧州。

TOP

支持5楼,若非万不得以,实在不赞同2 ,3 楼 对 findstr 这样的用法。
技术问题请到论坛发帖求助!

TOP

回复 4楼 的帖子

我在测试的时候发现不用/i也可以正确匹配
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 5楼 的帖子

正解,呵呵。
我开始写那个正则表达式的时候,不小心写错了,后来拆分成两个findstr做测试,最后帖代码的时候忘了放回到括号里面,贻笑大方了。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

返回列表