标题: [文件操作] 批处理如何统计文件夹中文件名不是以指定字符开头的文件的个数/数量 [打印本页]
作者: yeahey_726 时间: 2012-12-21 21:51 标题: 批处理如何统计文件夹中文件名不是以指定字符开头的文件的个数/数量
本帖最后由 pcl_test 于 2016-10-10 12:44 编辑
我现在想统计我多个文件夹中的非以0开头的jpg文件个数,然后以存入txt文件中,其中,每一行内容是:文件夹名、该文件夹中非以0开头的jpg文件个数,该怎么写啊,我的水平太低级了,先向各位大大请教,谢谢了!
作者: ivor 时间: 2012-12-22 03:00
- @echo off & setlocal enabledelayedexpansion
- ::初始化count
- set count = 0
- ::遍历jpg文件
- for /r "." %%a in (*.jpg) do (
-
- set fn=%%~na
- if "!fn:~0,1!" neq "0" (
- set /a count += 1
- echo %%~a>>1.txt
- echo %%~a
- )
- )
- echo 非0开头的文件数量为%count%个>>1.txt
- echo 非0开头的文件数量为%count%个
- echo.
- echo 结果已经保存在了当前文件夹1.txt中了
- echo.
- pause
复制代码
作者: yeahey_726 时间: 2012-12-22 07:47
谢谢ivor 兄,这么晚了还在网上,是在国外念书?输出结果是很细致,每个非0开头的文件名都统计上去了。不过,我要的很简单,只要文件个数,我才开始学习批处理,又要的急,所以再次请教,谢谢,我直接echo count不行
作者: yeahey_726 时间: 2012-12-22 09:43
还有部分文件名开头为特殊字符,如~等
作者: yeahey_726 时间: 2012-12-22 11:22
可能是我没讲清楚吧,我的文件夹内有很多子目录,每个子目录里面有很多不同类型的文件,文件名也各种各样,含不少特殊符号,我现在需要:在文件夹内双击,可以输出1.txt,内容为:
子文件夹1:总文件个数、jpg文件个数、非0开头的jpg文件个数
子文件夹2:总文件个数、jpg文件个数、非0开头的jpg文件个数
我刚学批处理,老没搞好,再次请求各位大牛!
作者: yeahey_726 时间: 2012-12-22 14:32 标题: 批处理中减法怎么实现?
本帖最后由 yeahey_726 于 2012-12-22 14:37 编辑
@echo off
((dir /a-d /b *.jpg |find /v /c "")- (dir /a-d /b 0*.jpg |find /v /c ""))>1.txt
pause
我想把文件夹中非以0开头的jpg文件数算出来,怎么实现不了呢?两个值求出来是正确的,就是相减以后就没结果了?!
请多多指点,谢谢,为了大家注意,再开一个帖子,版主不会找茬吧,
作者: yeahey_726 时间: 2012-12-22 14:32
本帖最后由 yeahey_726 于 2012-12-22 14:35 编辑
@echo off
((dir /a-d /b *.jpg |find /v /c "")- (dir /a-d /b 0*.jpg |find /v /c ""))>1.txt
pause
我想把文件夹中非以0开头的jpg文件数算出来,怎么实现不了呢?两个值求出来是正确的,就是相减以后就没结果了?!请多多指点,谢谢
作者: terse 时间: 2012-12-22 15:35
- @echo off&setlocal enabledelayedexpansion
- set a=*.jpg
- set b=0%a%*
- for %%i in (a b) do (
- for /f %%j in ('dir /a-d /b "!%%i!" 2^>nul^|find /v /c ""') do set N_%%i=%%j
- )
- set /a N=N_a-N_b
- echo %N%
- pause
复制代码
作者: 极品小猫 时间: 2012-12-22 17:43
本帖最后由 极品小猫 于 2012-12-23 00:01 编辑
如果需要进行数字运算,需要利用变量来处理,使用 set /a 来进行计算
下面提供一个更加简便直接的办法- @echo off
- for /f %%i in ('dir /a-d /s /b *.jpg^|findstr /i "\<[^0]*.jpg$"') do (
- echo %%i
- set /a num+=1
- )
- echo 非0开头的JPG文件数量:%num%
- pause
复制代码
作者: CrLf 时间: 2012-12-22 18:25
for /f "eol=0 delims=" …
作者: Demon 时间: 2012-12-22 19:04
本年度最牛逼批处理
作者: batman 时间: 2012-12-22 19:15
回复 5# Demon
同感。。。。
敢想敢写是好的,但是万事还有着规律的,不能乱写啊,楼主。。。
作者: ivor 时间: 2012-12-22 19:53
本帖最后由 ivor 于 2012-12-22 21:00 编辑
回复 6# yeahey_726
假如8+8在控制台中可以运行吗?不能运算啊,你可以加set /a 在前面试试行不行
特殊字符例如:~ ^ &没问题啊,还有一些特殊字符根本就不能命名文件的啊啊
echo count没有结果,应该是echo %count%或者echo !count!
作者: yeahey_726 时间: 2012-12-22 20:23
呵呵,谢谢terse、极品小猫、以及另外三位仁兄,另外还要感谢的是Demon兄的评奖,算了,cctv俺不准备感谢了。以前没接触过批处理,一次无意中发现它的高效,所以才在网上找了一两篇文章:《批处理入门手册》修正版、批处理For语句从入门到精通(完整版),看了一下,感觉还是不大清楚。然后找到这个网站,感觉很好,我两次咨询,马上有回复了。希望有时间静下心看份教材,各位能有什么推荐呢?入门到高级的。
作者: yeahey_726 时间: 2012-12-22 22:42
验证了一下极品小猫的程序,一直跑不通,后面学习了一些资料,发现是for语句里面的"^\<[^0]*.jpg"打错了,应该为"^\<[^0].*jpg"。终于搞定,谢谢极品小猫,terse 的程序暂时没看懂,有空学习学习,
作者: 极品小猫 时间: 2012-12-23 00:05
回复 8# yeahey_726
已改正, 复制代码时出问题了, 你那种用法建议不要使用, 容易出问题
作者: yeahey_726 时间: 2012-12-23 00:43
在度娘上找到这么一段代码:
for /f "delims=" %%a in ('dir /ad /b') do (
for /f %%s in ('dir /b /a-d /b %%a ^| find /v /c ""') do echo %%a;%%b >> LIST.txt)
它是统计每个子文件夹下的文件个数,很不错.find好像不接收findstr里面的^等参数,所以无法统计非零开头的jpg文件,有办法处理么?用findstr该怎么用?
作者: terse 时间: 2012-12-23 01:36
回复 10# yeahey_726
如果 DIR 加参数/S 搜子目录的话 那怎么确保文件名在前面 行首应该是路径把
dir 加 findstr 的话 再加FIND
不搜索子目录- dir /a-d /b *.jgs |findstr /bv "0"|find /v /c ""
复制代码
作者: CrLf 时间: 2012-12-23 01:50
本帖最后由 CrLf 于 2012-12-23 01:53 编辑
- @echo off
- for /f %%a in ('dir /a-d /s /b *.jpg^|findstr /v "\\0[^\]*"^|find /c /v ""') do set n=%%a
- echo %n%
- pause
复制代码
- @echo off&set n=0
- for /f "delims=" %%a in ('dir /a-d /s /b *.jpg') do (
- for /f "eol=0 delims=" %%b in ("%%~nxa") do set /a n+=1
- )
- echo %n%
- pause
复制代码
作者: yeahey_726 时间: 2012-12-23 08:34
本帖最后由 yeahey_726 于 2012-12-23 08:42 编辑
呵呵,谢谢,谢谢各位夜行大侠,尤其是CrLf ,太给力了,一下发两个,让我对批处理更明晰了,赞一个!
作者: yeahey_726 时间: 2012-12-23 11:18
本帖最后由 yeahey_726 于 2012-12-23 11:21 编辑
文件夹内有很多子目录(只有一级),每个子目录里面有很多不同类型的文件,文件名也各种各样,含不少特殊符号,
我现在需要:在文件夹内双击,可以输出1.txt,内容为:
子目录1, 非0开头的jpg文件数;
子目录2, 非0开头的jpg文件数;
还请各位大侠各显神通,试着不同方法实现一下?谢谢,我现在还在调试,一直没成功
作者: yeahey_726 时间: 2012-12-23 11:40
@echo off
for /f "delims=" %%a in ('dir /ad /b') do (
set /a b=(dir /b /a-d %%a ^|findstr \i "^0.*pdg$" ^|find /c "" )
echo %%a;%b% >> LIST.txt
)
我这个一直不知道错在哪儿,恭请大侠指点
作者: BAT-VBS 时间: 2012-12-23 12:08
回复 14# yeahey_726 - @echo off
- for /d %%a in (*) do (
- set /p =%%a: <nul
- for /f %%b in ('dir /b "%%a\*.jpg" ^| findstr /v "^0" ^| find /v /c ""') do (
- echo,%%b
- )
- )
复制代码
作者: yeahey_726 时间: 2012-12-23 14:01
谢谢,彻底搞定,我们这个网站太给力了,希望越办越好~~
作者: BAT-VBS 时间: 2012-12-26 06:51
回复 17# yeahey_726
问题解决后,请编辑顶楼帖子在标题前面注明[已解决],并给回答者加分。
作者: 523066680 时间: 2012-12-26 08:47
本帖最后由 523066680 于 2012-12-26 08:56 编辑
我装了grep for win32
dir *.jpg /b |grep "^[^0]" -c
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |