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

[文件操作] [已解决]批处理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"
复制代码

回复 1# fantasy_07


    试试第3行到第7行合并成一个echo命令能节省多少时间呢?
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复  fantasy_07


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



    测试了一个小文件夹,后面真正执行的时间会缩短,但是执行前还是要等待好久

TOP

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

TOP

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
复制代码

TOP

手动执行一下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,整个执行就快好多

TOP

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



    powershell怎么用啊?

TOP

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

TOP

  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"
复制代码

TOP

返回列表