Board logo

标题: [文件操作] [已解决]批处理dir一个46w个文件的文件夹,速度慢 [打印本页]

作者: fantasy_07    时间: 2021-7-19 17:08     标题: [已解决]批处理dir一个46w个文件的文件夹,速度慢

本帖最后由 fantasy_07 于 2021-7-19 21:09 编辑
  1. @echo off & setlocal enabledelayedexpansion
  2. (for /f "delims=" %%i in ('dir F:\bapdffile /s /b /a-d') do (
  3. set /p =%%i,<nul %文件路径,英文逗号做分隔符,sql server可以识别%
  4. set /p =%%~nxi,<nul %文件名+扩展名%
  5. set /p =%%~zi,<nul %文件大小%
  6. set /p =%%~ti:00.000,<nul %文件修改日期%
  7. echo !date:~0,10! !time!0
  8. )
  9. )>"E:\import\拷贝病历\3.txt"
复制代码
这个文件夹下,一共有46w个文件

这个批处理执行的时候,为什么要等好久啊
比如1点钟点了执行,结果2点钟才开始输出数据,19分钟执行完,但是前面等待了1小时

把dir的目录另存到txt,然后执行for /f,快了好多。执行完只需要4-5分钟
  1. @echo off & setlocal enabledelayedexpansion
  2. dir F:\bapdffile  /s /b /a-d-h >E:\import\拷贝病历\dir.txt
  3. (for /f %%i in (E:\import\拷贝病历\dir.txt) do (
  4. echo %%i,%%~nxi,%%~zi,%%~ti:00.000,!date:~0,10! !time!0
  5. )
  6. )>"E:\import\拷贝病历\1.txt"
复制代码

作者: Batcher    时间: 2021-7-19 17:24

回复 1# fantasy_07


    试试第3行到第7行合并成一个echo命令能节省多少时间呢?
作者: fantasy_07    时间: 2021-7-19 17:45

回复  fantasy_07


    试试第3行到第7行合并成一个echo命令能节省多少时间呢?
Batcher 发表于 2021-7-19 17:24



    测试了一个小文件夹,后面真正执行的时间会缩短,但是执行前还是要等待好久
作者: idwma    时间: 2021-7-19 18:40

手动执行一下dir F:\bapdffile /s /b /a-d看要多久时间
可以试试for /r来输出文件路径,不用像dir要等执行完成才开始循环
作者: newswan    时间: 2021-7-19 19:41

powershell 看看速度如何
  1. $sour = "."
  2. $dest = "3.txt"
  3. $a = [System.Collections.ArrayList] @{}
  4. Get-ChildItem -path $sour | ForEach-Object {
  5.     $a.add( $_.fullname + "," +  $_.name + "," + $_.Length + "," + $_.LastWriteTime  + "," + (get-date -Format "yyyy-MM-dd HH:mm:ss:fff") )
  6. }
  7. $a | out-file -encoding utf8 $dest
复制代码

作者: fantasy_07    时间: 2021-7-19 20:13

手动执行一下dir F:\bapdffile /s /b /a-d看要多久时间
可以试试for /r来输出文件路径,不用像dir要等执行完 ...
idwma 发表于 2021-7-19 18:40



    执行 dir F:\bapdffile /s /b /a-d 很快的,只要1分钟左右
用for /r 无延迟,可以立即执行

我试着把dir后的目录导入txt,然后用 for /f 读取txt,整个执行就快好多
作者: fantasy_07    时间: 2021-7-19 20:42

powershell 看看速度如何
newswan 发表于 2021-7-19 19:41



    powershell怎么用啊?
作者: newswan    时间: 2021-7-19 20:48

本帖最后由 newswan 于 2021-7-19 20:51 编辑

回复 7# fantasy_07


win10 自带powershell
把这一句加到第一行,保存为bat
  1. @powershell -c "Get-Content '%~0' | Select-Object -Skip 1 | Out-String | Invoke-Expression" & pause & exit
复制代码
http://bbs.bathome.net/thread-31071-1-1.html
作者: cmd1152    时间: 2021-7-19 21:02

  1. @echo off & setlocal enabledelayedexpansion
  2. (for /f "delims=" %%i in ('dir F:\bapdffile /s /b /a-d') do (set /p =%%i,<nul&set /p =%%~nxi,<nul&set /p =%%~zi,<nul&set /p =%%~ti:00.000,<nul &echo !date:~0,10! !time!0))>"E:\import\拷贝病历\3.txt"
复制代码





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