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

[文件操作] [已解决]请教如何在代码中加入提取日期命令

本帖最后由 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. }
复制代码

多线程可能就可以解决。

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

试下速度能否满意?

TOP

回复 2# BAT221110


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

TOP

回复  BAT221110


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



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

TOP

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

TOP

删了第47行应该会比原来快一点

TOP

回复 5# BAT221110


    明白了,我来试一下,谢谢大佬

TOP

回复 6# idwma


    测试了下速度还是相差不大

TOP

百万数据级别还是花钱找那种高手来搞吧

TOP

回复 9# pd1


    已更新问题

TOP

已解决,感谢群里的大神,代码如下:
  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. }
复制代码

TOP

没想到用WINDOWS SCRIPT就能快很多。原来POWERSHELL比想象中的性能副作用多这么多。

TOP




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

顺便测一下新的图床好不好用。
QQ: 己阵亡
脚本优先 [PowerShell win10]

TOP

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

QQ: 己阵亡
脚本优先 [PowerShell win10]

TOP

回复 14# xczxczxcz


    之前用的代码是批处理中调用Powershell,请问大佬是不是这个原因拖慢了速度呀?为何大佬的速度如此之快,可以分享一下吗?

TOP

返回列表