Board logo

标题: [文件操作] [已解决]请教如何在代码中加入提取日期命令 [打印本页]

作者: guliduo    时间: 2022-11-11 18:31     标题: [已解决]请教如何在代码中加入提取日期命令

本帖最后由 guliduo 于 2022-11-12 02:16 编辑

请教能否在代码中加入日期(比如创建日期,修改日期,访问日期)
代码如下:
  1. @if(0)==(0) echo off
  2. cd /d "%~dp0"
  3. dir /b /a-d /s *.jpg *.jpeg *.bmp *.png *.gif *.tif | cscript //nologo //e:jscript "%~f0" > result.csv
  4. pause & exit
  5. @end
  6. function formatSize(size){
  7.     if( size >= 1073741824 ){
  8.        return Math.round( 100 * size / 1073741824 ) / 100 + 'GB';
  9.     }else if( size >= 1048576 ){
  10.         return Math.round( 100 * size / 1048576 ) / 100 + 'MB';
  11.     }else if( size >= 1024 ){
  12.         return Math.round( 100 * size / 1024 ) / 100 + 'KB';
  13.     }else{
  14.         return size + 'B';
  15.     }
  16. }
  17. var img = new ActiveXObject('WIA.ImageFile');
  18. var fso = new ActiveXObject('Scripting.FileSystemObject');
  19. WSH.Echo('名称,大小,像素,分辨率');
  20. while( !WSH.StdIn.AtEndOfStream ){
  21.     var file = WSH.StdIn.ReadLine();
  22.     var size = fso.GetFile(file).Size;
  23.     img.LoadFile(file);
  24.     var s = '"' + file + '",' + formatSize(size) + ',' + img.Width + 'x' + img.Height + ',' + img.HorizontalResolution;
  25.     WSH.Echo(s);
  26. }
复制代码

作者: BAT221110    时间: 2022-11-11 20:01

多线程可能就可以解决。

有一个简单的多线程方式,就是手动把图片分到多个文件夹,然后同时运行很多个这个脚本。

试下速度能否满意?
作者: guliduo    时间: 2022-11-11 20:14

回复 2# BAT221110


    现在是已经分好了文件夹,但是文件夹数量也巨大,有6万个文件夹,请问大佬同时执行是怎么操作?需要把bat放到每个文件夹吗?
是不是Powershell命令拖慢了速度呢?
作者: BAT221110    时间: 2022-11-11 20:19

回复  BAT221110


    现在是已经分好了文件夹,但是文件夹数量也巨大,有6万个文件夹,请问大佬同时执 ...
guliduo 发表于 2022-11-11 20:14



    可以这样:比方说分10个线程,就按照片数量来平均分成10个文件夹。比如一个文件夹里面分6000个文件夹,然后再分别同时对这10个分开的文件夹运行脚本。
作者: BAT221110    时间: 2022-11-11 20:40

不过有个地方需要注意:这个脚本把输出结果放在一个固定名字的文件夹里,所以使用时也要把脚本复制到多给位置,防止同一目录里的输出文件互相复写。或者修改脚本,控制每次输出的文件不同也可。
作者: idwma    时间: 2022-11-11 20:50

删了第47行应该会比原来快一点
作者: guliduo    时间: 2022-11-11 21:18

回复 5# BAT221110


    明白了,我来试一下,谢谢大佬
作者: guliduo    时间: 2022-11-11 21:28

回复 6# idwma


    测试了下速度还是相差不大
作者: pd1    时间: 2022-11-11 22:52

百万数据级别还是花钱找那种高手来搞吧
作者: guliduo    时间: 2022-11-11 23:09

回复 9# pd1


    已更新问题
作者: guliduo    时间: 2022-11-12 02:14

已解决,感谢群里的大神,代码如下:
  1. @if(0)==(0) echo off
  2. cd /d "%~dp0"
  3. dir /b /a-d /s *.jpg *.jpeg *.bmp *.png *.gif *.tif | cscript //nologo //e:jscript "%~f0" > result.csv
  4. pause & exit
  5. @end
  6. function formatSize(size){
  7.     if( size >= 1073741824 ){
  8.        return Math.round( 100 * size / 1073741824 ) / 100 + ' GB';
  9.     }else if( size >= 1048576 ){
  10.         return Math.round( 100 * size / 1048576 ) / 100 + ' MB';
  11.     }else if( size >= 1024 ){
  12.         return Math.round( 100 * size / 1024 ) / 100 + ' KB';
  13.     }else{
  14.         return size + ' B';
  15.     }
  16. }
  17. function fmtdate(d4)
  18. {
  19. var d = new Date(d4)
  20. return d.getFullYear() + "-" + (d.getMonth() + 1) + "-" + d.getDate() + " " + d.getHours() + ":" + d.getMinutes() + ":" + d.getSeconds()
  21. }
  22. var img = new ActiveXObject('WIA.ImageFile');
  23. var fso = new ActiveXObject('Scripting.FileSystemObject');
  24. WSH.Echo('名称,大小,图像尺寸,分辨率,创建时间,修改时间,访问时间');
  25. while( !WSH.StdIn.AtEndOfStream ){
  26.     var file = WSH.StdIn.ReadLine();
  27.     var f4 = fso.GetFile(file)
  28.     var size = f4.Size;
  29.     img.LoadFile(file);
  30.     var s = '"' + file + '",' + formatSize(size) + ',' + img.Width + 'x' + img.Height + ',' + img.HorizontalResolution + ',' + fmtdate(f4.DateCreated) + ',' + fmtdate(f4.DateLastModified) + ',' + fmtdate(f4.DateLastAccessed);
  31.     // https://learn.microsoft.com/zh-cn/office/vba/language/reference/user-interface-help/getfile-method
  32.     // https://learn.microsoft.com/zh-cn/office/vba/language/reference/user-interface-help/datecreated-property
  33.     WSH.Echo(s);
  34. }
复制代码

作者: BAT221110    时间: 2022-11-12 06:26

没想到用WINDOWS SCRIPT就能快很多。原来POWERSHELL比想象中的性能副作用多这么多。
作者: xczxczxcz    时间: 2022-11-12 09:31




PS 也是不慢的嘛
电脑中 2322张 手机拍照图,分辨率 5520*4140 5248*3936 3264*2448 1920*1080 前面两个大的为索尼拍的,后面两个三星手机拍的(约几百张),若只处理这2千多张图约2.7秒,1百万张测试 (431次循环)约174秒,还是可以接收的嘛。

顺便测一下新的图床好不好用。
作者: xczxczxcz    时间: 2022-11-12 12:38

如果不显示处理进度的话 2322 张 约0.6秒


作者: guliduo    时间: 2022-11-13 00:35

回复 14# xczxczxcz


    之前用的代码是批处理中调用Powershell,请问大佬是不是这个原因拖慢了速度呀?为何大佬的速度如此之快,可以分享一下吗?
作者: WHY    时间: 2022-11-21 21:26

顶楼脚本与 PowerShell 有一毛钱关系吗?
楼主,顶楼脚本是我上个帖子回复你的,没见你哼哈一句,然后又到这里重新发问,几个意思?




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