标题: [文件操作] [已解决]请教如何在代码中加入提取日期命令 [打印本页]
作者: guliduo 时间: 2022-11-11 18:31 标题: [已解决]请教如何在代码中加入提取日期命令
本帖最后由 guliduo 于 2022-11-12 02:16 编辑
请教能否在代码中加入日期(比如创建日期,修改日期,访问日期)
代码如下:- @if(0)==(0) echo off
- cd /d "%~dp0"
- dir /b /a-d /s *.jpg *.jpeg *.bmp *.png *.gif *.tif | cscript //nologo //e:jscript "%~f0" > result.csv
- pause & exit
- @end
-
- function formatSize(size){
- if( size >= 1073741824 ){
- return Math.round( 100 * size / 1073741824 ) / 100 + 'GB';
- }else if( size >= 1048576 ){
- return Math.round( 100 * size / 1048576 ) / 100 + 'MB';
- }else if( size >= 1024 ){
- return Math.round( 100 * size / 1024 ) / 100 + 'KB';
- }else{
- return size + 'B';
- }
- }
-
- var img = new ActiveXObject('WIA.ImageFile');
- var fso = new ActiveXObject('Scripting.FileSystemObject');
-
- WSH.Echo('名称,大小,像素,分辨率');
- while( !WSH.StdIn.AtEndOfStream ){
- var file = WSH.StdIn.ReadLine();
- var size = fso.GetFile(file).Size;
- img.LoadFile(file);
- var s = '"' + file + '",' + formatSize(size) + ',' + img.Width + 'x' + img.Height + ',' + img.HorizontalResolution;
- WSH.Echo(s);
- }
复制代码
作者: 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
已解决,感谢群里的大神,代码如下:- @if(0)==(0) echo off
- cd /d "%~dp0"
- dir /b /a-d /s *.jpg *.jpeg *.bmp *.png *.gif *.tif | cscript //nologo //e:jscript "%~f0" > result.csv
- pause & exit
- @end
-
- function formatSize(size){
- if( size >= 1073741824 ){
- return Math.round( 100 * size / 1073741824 ) / 100 + ' GB';
- }else if( size >= 1048576 ){
- return Math.round( 100 * size / 1048576 ) / 100 + ' MB';
- }else if( size >= 1024 ){
- return Math.round( 100 * size / 1024 ) / 100 + ' KB';
- }else{
- return size + ' B';
- }
- }
-
- function fmtdate(d4)
- {
- var d = new Date(d4)
- return d.getFullYear() + "-" + (d.getMonth() + 1) + "-" + d.getDate() + " " + d.getHours() + ":" + d.getMinutes() + ":" + d.getSeconds()
- }
-
- var img = new ActiveXObject('WIA.ImageFile');
- var fso = new ActiveXObject('Scripting.FileSystemObject');
-
- WSH.Echo('名称,大小,图像尺寸,分辨率,创建时间,修改时间,访问时间');
- while( !WSH.StdIn.AtEndOfStream ){
- var file = WSH.StdIn.ReadLine();
- var f4 = fso.GetFile(file)
- var size = f4.Size;
- img.LoadFile(file);
- var s = '"' + file + '",' + formatSize(size) + ',' + img.Width + 'x' + img.Height + ',' + img.HorizontalResolution + ',' + fmtdate(f4.DateCreated) + ',' + fmtdate(f4.DateLastModified) + ',' + fmtdate(f4.DateLastAccessed);
- // https://learn.microsoft.com/zh-cn/office/vba/language/reference/user-interface-help/getfile-method
- // https://learn.microsoft.com/zh-cn/office/vba/language/reference/user-interface-help/datecreated-property
- WSH.Echo(s);
- }
复制代码
作者: 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 |