Board logo

标题: [文件操作] 批处理如何获取文件夹里第一个和最后一个文件的文件名及文件总数量并输出到txt [打印本页]

作者: crownking1983    时间: 2016-5-8 11:55     标题: 批处理如何获取文件夹里第一个和最后一个文件的文件名及文件总数量并输出到txt

因工作的特别要求,有1000个文件夹,每个文件夹里有几十个文件且都没有子文件夹没有二级目录,跪求一个批处理程序,实现批量统计这1000个文件夹的以下信息并按以下格式列到一个txt文本里。

(文件夹名)空格(文件夹第一个文件的文件名)空格(文件夹最后一个文件的文件名)空格(这个文件夹里的文件数量)

如果太抽象的话 我举个例子,比如其中一个文件夹,文件夹名是ABC,文件夹里有文件0001.jpg  0002.txt  0003.zip …… 0041.doc共41个文件,经过批处理后,其在批处理后生成的文本文件里属于它的那一行内容为:

ABC 0001.jpg 0041.doc 41

大师们,休怪我的要求奇葩,的确是工作需要,不到万不得已我真的不想问这么无厘头的问题。
但是这种批处理程序对高手来说,是易如反掌吧?
作者: pcl_test    时间: 2016-5-8 12:47

  1. /*&cls
  2. @echo off
  3. set "netpath=%systemroot%\Microsoft.NET\Framework"
  4. for /f "delims=" %%a in ('dir /ad /b "%netpath%\v?.*"') do (
  5.     if exist "%netpath%\%%a\csc.exe" (
  6.         set "cscpath=%netpath%\%%a\csc.exe"
  7.         goto :0
  8.     )
  9. )
  10. echo;未安装.Net Framework 2.0及其上版本组件或相关程序丢失&pause&exit
  11. :0
  12. >"%tmp%\$" more +25 "%~f0"
  13. "%cscpath%" /out:"%tmp%\$Expdir.exe" "%tmp%\$"
  14. (for /f "delims=" %%a in ('dir /ad /b') do (
  15.     setlocal enabledelayedexpansion
  16.     for /f "delims=" %%b in ('%tmp%\$Expdir.exe "%~dp0%%a"') do (
  17.         set /a n+=1
  18.         if !n! equ 1 set "#1=%%~nxb"
  19.         set "#n=%%~nxb"
  20.     )
  21.     if defined n if !n! equ 1 (echo;%%a !#1! !n!) else echo;%%a !#1! !#n! !n!
  22.     endlocal
  23. ))>"%~dp0结果.txt"
  24. pause&exit
  25. */
  26. using System;
  27. using System.IO;
  28. using System.Runtime.InteropServices;
  29. class Expdir
  30. {
  31.     [DllImport("Shlwapi.dll", CharSet = CharSet.Unicode)]
  32.     private static extern int StrCmpLogicalW(string psz1, string psz2);
  33.     static void Main(string[] args)
  34.     {
  35.         String path = args.Length>0?args[0].ToString():Environment.CurrentDirectory;
  36.         string[] files = Directory.GetFiles(path);
  37.         Array.Sort(files, StrCmpLogicalW);
  38.         foreach (string file in files)
  39.         {
  40.           Console.WriteLine(file);
  41.         }
  42.     }
  43. }
复制代码

作者: crownking1983    时间: 2016-5-8 13:08

回复 2# pcl_test


    太牛逼了老师,跪舔你的脚趾头!那老师,能否进一步改良,实现这样的格式——
(文件夹名)空格(第1个文件名)空格(第2个文件名)空格(最后一个文件名)空格(这个文件夹里的文件数量)

也就是统计的时候 将第二个文件的文件名也统计进去
作者: pcl_test    时间: 2016-5-8 13:14

回复 3# crownking1983


    能。所以你为什么要改要求呢,挤牙膏呀
作者: crownking1983    时间: 2016-5-8 13:17

回复 4# pcl_test


    额 那不是因为昨天到今天中午,虽有100多次浏览但是一直没有人回复我,我以为第二个文件加进去就造成巨大的难度,所有没有人回答。故此就退而求其次去掉了第二个文件的要求。
毕竟我是外行嘛 以为加上第二个文件就非常有难度了
作者: crownking1983    时间: 2016-5-8 13:19

本帖最后由 crownking1983 于 2016-5-8 16:18 编辑

回复 4# pcl_test

大师,我知道你挺烦我的,但是您也体谅我是一个非计算机专业的外行人。我在机关事业单位工作,繁杂的工作正需要您这样的批处理编程高手帮助,让我本来5天才能完成的工作几个小时就可以完成了,在此我感谢你。
但是由于我不了解批处理命令的特点,一些我看起来感觉简单的事儿但是批处理却会十分麻烦,基于此点顾虑,我才将请求帮助的内容做了修改。但是您既然说添加第二个文件到统计列表里是可以做到的,那就帮人帮到底帮我改一下吧。从中午一点多到现在,我自己死活搞不定不知如何添加第二个文件名到列表里,我已经研究三个小时了,所以麻烦您用三分钟时间解救一下我,即便您很讨厌我,我这三个小时也得到惩罚了
作者: crownking1983    时间: 2016-5-8 13:40

回复 4# pcl_test


      我试着将这一行  if defined n if !n! equ 1 (echo;%%a !#1! !n!) else echo;%%a !#1! !#n! !n!
                     改为  if defined n if !n! equ 1 (echo;%%a !#1! !#2! !n!) else echo;%%a !#1! !#2! !#n! !n!
但是没有实现加入第二个文件名 您看是哪里不对呢




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2