标题: [文件操作] 获取指定路径下最新文件的信息 [打印本页]
作者: 樵夫 时间: 2018-3-29 11:06 标题: 获取指定路径下最新文件的信息
获取指定路径下(例如:d:\bakup)文件类型(例如:.bak)最新修改时间(例如:文件修改时间或创建时间)的信息(例如:完整文件路径、文件名称、文件大小(单位用:GB))
作者: 樵夫 时间: 2018-3-29 11:08
结果例如:
d:\bakup DB_20180329.bak 34G
作者: 樵夫 时间: 2018-3-29 11:32
怎么没有人回复的。唉唉
作者: Batcher 时间: 2018-3-29 11:49
BAT直接计算GB不太方便,需要用点别的手段。- @echo off
- for /f "delims=" %%i in ('dir /b /od "D:\bakup\*.bak" ') do (
- echo %%~fi %%~zi
- )
- pause
复制代码
作者: 樵夫 时间: 2018-3-29 14:05
回复 4# Batcher
不行额,我要最新的那一条。你这个全都提取出来了
作者: Batcher 时间: 2018-3-29 14:54
回复 5# 樵夫 - @echo off
- for /f "delims=" %%i in ('dir /b /od "D:\bakup\*.bak" ') do (
- set "FilePath=%%~fi"
- set "FileSize=%%~zi"
- )
- echo %FilePath%
- echo %FileSize%
- pause
复制代码
作者: 樵夫 时间: 2018-3-29 15:48
回复 6# Batcher
这个结果文件大小不是GB单位的额
作者: yhcfsr 时间: 2018-3-29 21:40
本帖最后由 yhcfsr 于 2018-3-29 22:48 编辑
1.备份源文件
2.此为powershell脚本,保存为ps1扩展名文件,右键单击脚本,以powershell运行
3.未对powershell进行过设置的,可以管理员身份运行CMD,复制以下命令到命令提符 以解除脚本限制- powershell -c "set-executionpolicy unrestricted"
复制代码
当然也可以管理员运行POWERSHELL,输入以下命令解除脚本限制- set-executionpolicy unrestricted
复制代码
4. WIN10以下系统如出错,可能需要去微软官网下载补丁升级powershell- dir * -r -File|%{if (($t-$_.CreationTime) -lt 0){$t=$_.CreationTime;$f=$_} }
- $flag=($f.Length -shr 30);
- if ($**){$size=($f.Length / 1GB);$Unit='GB'} else { $size=($f.Length / 1MB); $Unit='MB'}
- $size="{0:0.00}" -f $size
- Write-Host $f.FullName ' -- ' $size $Unit -fore green
复制代码
作者: WHY 时间: 2018-3-29 23:27
- PowerShell "(dir *.rar -Recurse|sort LastWriteTime)[-1]|select DirectoryName,Name,@{n='Size';e={($_.Length/1gb).ToString('0.00GB')}}"
复制代码
作者: WHY 时间: 2018-3-29 23:30
本帖最后由 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倍)- @echo off
- for /f "delims=" %%i in ('dir /b /o-d /a-d *.rar') do (
-
- setlocal enabledelayedexpansion
- set "sz=%%~zi00"
- set "Rem=!sz:~0,8!"
- rem Div=被除数; Rem=余数; Quo=商; Ret=结果
-
- for /L %%j in (8 1 20) do (
- if not "!sz:~%%j!" == "" (
- set "Div=!Rem!!sz:~%%j,1!"
- set /a Rem = Div %% 134217728, Quo = Div / 134217728
- if "!Rem!" == "0" (set "Rem=")
- set "Ret=!Ret!!Quo!"
- )
- )
-
- set "Ret=000000000!Ret!"
- set /a "Ret = (1!Ret:~-9! - 1000000000) / 8"
- if !Ret! LSS 100 (set "Ret=000!Ret!" & set "Ret=!Ret:~-3!")
-
- for /f %%j in ("!Ret:~0,-2!.!Ret:~-2!") do (
- endlocal
- for %%k in ("%%~dpi.") do echo;%%~fk %%~nxi %%jGB
- )
-
- pause & exit /b
- )
复制代码
作者: zaqmlp 时间: 2018-3-30 00:53
- @echo off
- for /f "delims=" %%a in ('dir /a-d/b/o-d *.bak') do (
- if not defined filename (
- set "file=%%~fa"
- set "filepath=%%~dpa"
- set "filename=%%~nxa"
- set "filesize=%%~za"
- )
- )
- echo;%file%
- echo;%filepath%
- echo;%filename%
- echo;%filesize% B
- for /f %%a in (
- 'mshta "VBScript:CreateObject("Scripting.Filesystemobject").GetStandardStream(1).Write(FormatNumber(%filesize%/1073741824,2,-1))(close)"'
- ) do set formatsize=%%a
- echo;%formatsize% GB
- pause
复制代码
作者: 樵夫 时间: 2018-3-30 10:04
回复 10# WHY
可用,完美符合要求。多谢啦!
作者: 樵夫 时间: 2018-3-30 11:56
回复 10# WHY
能不能再帮忙改一下:在结果中加多一个显示 这个结果文件的生成或者是修改日期?
作者: 樵夫 时间: 2018-3-30 17:46
回复 10# WHY
还在么
作者: WHY 时间: 2018-3-31 23:41
回复 13# 樵夫
第24行:
for %%k in ("%%~dpi.") do echo;%%~ti %~fk %%~nxi %%jGB
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |