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

[文件操作] 获取指定路径下最新文件的信息

获取指定路径下(例如:d:\bakup)文件类型(例如:.bak)最新修改时间(例如:文件修改时间或创建时间)的信息(例如:完整文件路径、文件名称、文件大小(单位用:GB))

回复 13# 樵夫


    第24行:
for %%k in ("%%~dpi.") do echo;%%~ti %~fk %%~nxi %%jGB

TOP

回复 10# WHY


    还在么

TOP

回复 10# WHY


    能不能再帮忙改一下:在结果中加多一个显示 这个结果文件的生成或者是修改日期?

TOP

回复 10# WHY


    可用,完美符合要求。多谢啦!

TOP

  1. @echo off
  2. for /f "delims=" %%a in ('dir /a-d/b/o-d *.bak') do (
  3.     if not defined filename (
  4.         set "file=%%~fa"
  5.         set "filepath=%%~dpa"
  6.         set "filename=%%~nxa"
  7.         set "filesize=%%~za"
  8.     )
  9. )
  10. echo;%file%
  11. echo;%filepath%
  12. echo;%filename%
  13. echo;%filesize% B
  14. for /f %%a in (
  15.     'mshta "VBScript:CreateObject("Scripting.Filesystemobject").GetStandardStream(1).Write(FormatNumber(%filesize%/1073741824,2,-1))(close)"'
  16. ) do set formatsize=%%a
  17. echo;%formatsize% GB
  18. pause
复制代码
提供bat代写,为你省时省力省事,支付宝扫码头像支付
微信: unique2random

TOP

本帖最后由 WHY 于 2018-3-31 23:36 编辑

2018-3-30 修改:去掉 dir /b /o-d /a-d /s 中的 /s
dir 加上 /o-d 和 /s 参数以后遍历子目录并按日期排序时,分别将各个子目录中的文件排序,不是所有文件排序,这与 PowerShell 不同。

2018-3-31 修改:脚本微调,减少循环次数。

脚本思路:
1.文件大小的值可能很大,超出 cmd 的限制(2^31),不能直接当作被除数来计算
  如果直接把 1GB(2^30)当作除数来计算,也可能超出限制
2.在文件大小这个字符串的后面补两个0,扩大100倍
3.假定扩大100倍后文件大小不超过 20 位,事实上不可能超出 20 位,分两步计算:
  a.从第 8 位开始到第 20 位,模拟笔算的方式除以 134217728(2^27)
  b.结果再直接除以 8(2^3)
4.最终结果取两位小数(缩小100倍)
  1. @echo off
  2. for /f "delims=" %%i in ('dir /b /o-d /a-d *.rar') do (
  3.     setlocal enabledelayedexpansion
  4.     set "sz=%%~zi00"
  5.     set "Rem=!sz:~0,8!"
  6.     rem Div=被除数; Rem=余数; Quo=商; Ret=结果
  7.     for /L %%j in (8 1 20) do (
  8.         if not "!sz:~%%j!" == "" (
  9.             set "Div=!Rem!!sz:~%%j,1!"
  10.             set /a Rem = Div %% 134217728, Quo = Div / 134217728
  11.             if "!Rem!" == "0" (set "Rem=")
  12.             set "Ret=!Ret!!Quo!"
  13.         )
  14.     )
  15.     set "Ret=000000000!Ret!"
  16.     set /a "Ret = (1!Ret:~-9! - 1000000000) / 8"
  17.     if !Ret! LSS 100 (set "Ret=000!Ret!" & set "Ret=!Ret:~-3!")
  18.     for /f %%j in ("!Ret:~0,-2!.!Ret:~-2!") do (
  19.         endlocal
  20.         for %%k in ("%%~dpi.") do echo;%%~fk %%~nxi %%jGB
  21.     )
  22.     pause & exit /b
  23. )
复制代码

TOP

  1. PowerShell "(dir *.rar -Recurse|sort LastWriteTime)[-1]|select DirectoryName,Name,@{n='Size';e={($_.Length/1gb).ToString('0.00GB')}}"
复制代码

TOP

本帖最后由 yhcfsr 于 2018-3-29 22:48 编辑

1.备份源文件
2.此为powershell脚本,保存为ps1扩展名文件,右键单击脚本,以powershell运行
3.未对powershell进行过设置的,可以管理员身份运行CMD,复制以下命令到命令提符 以解除脚本限制
  1. powershell -c "set-executionpolicy unrestricted"
复制代码
当然也可以管理员运行POWERSHELL,输入以下命令解除脚本限制
  1. set-executionpolicy unrestricted
复制代码
​4. WIN10以下系统如出错,可能需要去微软官网下载补丁升级powershell
  1. dir * -r -File|%{if (($t-$_.CreationTime) -lt 0){$t=$_.CreationTime;$f=$_}  }
  2. $flag=($f.Length -shr 30);
  3. if ($**){$size=($f.Length / 1GB);$Unit='GB'} else { $size=($f.Length / 1MB); $Unit='MB'}
  4. $size="{0:0.00}" -f $size
  5. Write-Host $f.FullName ' -- ' $size $Unit -fore green
复制代码

TOP

回复 6# Batcher


    这个结果文件大小不是GB单位的额

TOP

回复 5# 樵夫
  1. @echo off
  2. for /f "delims=" %%i in ('dir /b /od "D:\bakup\*.bak" ') do (
  3.     set "FilePath=%%~fi"
  4.     set "FileSize=%%~zi"
  5. )
  6. echo %FilePath%
  7. echo %FileSize%
  8. pause
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 4# Batcher


    不行额,我要最新的那一条。你这个全都提取出来了

TOP

BAT直接计算GB不太方便,需要用点别的手段。
  1. @echo off
  2. for /f "delims=" %%i in ('dir /b /od "D:\bakup\*.bak" ') do (
  3.     echo %%~fi %%~zi
  4. )
  5. pause
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

怎么没有人回复的。唉唉

TOP

结果例如:
d:\bakup DB_20180329.bak 34G

TOP

返回列表