无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 736|回复: 59
打印 上一主题 下一主题

[已解决] 悬赏500无忧币:解决PE下,用批处理“获取X盘的文件大小”出错的问题。谢谢

  [复制链接]
跳转到指定楼层
#
500无忧币
本帖最后由 yyz2191958 于 2025-2-18 21:31 编辑

完美解决:
@set @x=1 /* &@echo off &::【代码(最前)和(最后)好像不能有字符。(z.toFixed(3)————3位小数)】
if "%~1"=="" exit /b 3
if not exist %1 exit /b 3
set "v=" &set "v=%~1"
set "q=0"
dir /ad %1 >nul 2>&1
if %errorlevel% equ 0 (set "q=1") else if exist "%v%" (for %%v in ("%v%") do set "v=%%~zv") else set "v=%v:,=%"
cscript /nologo /e:jscript "%~f0" "%v%" %q%
pause>nul 2>nul&exit/b */
n=0, v=WSH.arguments, q=v(1);
if (q==1) { z=WSH.createObject('scripting.fileSystemObject').getFolder(v(0)).size }
else z=+v(0);
while (z/1024>=1) {z/=1024; n++; if (n==6) break;}
z=z.toFixed(3)+[' 字节',' KB',' MB',' GB',' TB',' PB',' EB'][n];
WSH.echo(z), WSH.quit();

===============================================
原来的问题:
悬赏500无忧币:解决PE下,用批处理“获取X盘的文件大小”出错的问题。谢谢
*******************************************************************************
由于悬赏的无忧币,如果问题没有解决,不能够返回。由此,这里悬赏1无忧币,一旦问题解决,我会编辑为悬赏500无忧币给你。谢谢
*******************************************************************************
已有批处理“文件、文件夹(拖到图标)显示大小(有小数).bat”
=====================================================
@set @x=1 /* &@echo off  &::【代码(最前)和(最后)好像不能有字符。(z.toFixed(2)————两位小数)】
set "v=" &set "v=%1"
if not defined v (exit/b) else (set "q=0" &set v=%v:"=%)
if exist "%v%"\ (set "q=1") else if exist "%v%" (for %%v in ("%v%") do set "v=%%~zv") else set "v=%v:,=%"
cscript /nologo /e:jscript "%~f0" "%v%" %q%
pause>nul 2>nul&exit/b */
n=0, v=WSH.arguments, q=v(1);
if (q==1) { z=WSH.createObject('scripting.fileSystemObject').getFolder(v(0)).size }
else z=+v(0);
while (z/1024>=1) {z/=1024; n++; if (n==6) break;}
z=z.toFixed(2)+[' 字节',' KB',' MB',' GB',' TB',' PB',' EB'][n];
WSH.echo(z), WSH.quit();
=====================================================
目的:将“文件 或 文件夹”,拖到bat的图标上,就在窗口显示文件(文件夹)的大小(能够根据数数值的大小,自动显示为:字节、KB、MB、GB、TB、PB、EB)
=====================================================
目前情况:在 10 PE下(2013koko制作的:Win10PEx64_10586_网络版)
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=435502
将“文件 或 文件夹”拖到bat的图标上,拖c、d盘上的“文件 或 文件夹”没有问题。将X盘“文件 或 文件夹”拖到bat的图标上,文件夹没有问题,文件就提示:路径未找到。
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=444771&extra=
=====================================================
需要达到目的:
将“文件 或 文件夹”,拖到bat的图标上就在窗口显示文件(文件夹)的大小(能够根据数数值的大小,自动显示为:字节、KB、MB、GB、TB、PB、EB)(我的PE下 和 正常系统中都正常)(修改原有bat,或者自己写都行)


文件(夹)(小数)完美.rar

603 Bytes, 下载次数: 1, 下载积分: 无忧币 -2

49#
发表于 4 天前 | 只看该作者
yyz2191958 发表于 2025-2-18 17:31
刚好3位数字的时候,没有小数点


VBS代码中,Fixed(2) 表示保留2位小数点;PowerShell代码中,{0:N2} 表示保留2位小数点。
回复

使用道具 举报

48#
发表于 4 天前 | 只看该作者
以前xp 系统有个DLL, 显示文件夹大小 ,特别好用, win10没了
回复

使用道具 举报

47#
 楼主| 发表于 4 天前 | 只看该作者
martin313 发表于 2025-2-19 12:20
要通过修改注册表在Windows中实现文件或文件夹大小显示小数点后三位数,可以尝试以下方法。但需注意,此 ...

是呀,10 PE 没有效果哦
回复

使用道具 举报

46#
 楼主| 发表于 4 天前 | 只看该作者
martin313 发表于 2025-2-19 12:20
要通过修改注册表在Windows中实现文件或文件夹大小显示小数点后三位数,可以尝试以下方法。但需注意,此 ...

我试一试 谢谢
回复

使用道具 举报

45#
发表于 4 天前 | 只看该作者

要通过修改注册表在Windows中实现文件或文件夹大小显示小数点后三位数,可以尝试以下方法。但需注意,此操作可能影响系统中其他数字的显示格式,请谨慎操作并提前备份注册表。

步骤如下:
打开注册表编辑器
按下 Win + R,输入 regedit,回车并确认管理员权限。

导航至区域格式设置项
转到以下路径:

复制
HKEY_CURRENT_USER\Control Panel\International
修改小数位数键值

找到右侧的 iDigits 键值(控制小数位数)。

双击 iDigits,将其数值数据从默认的 2 改为 3(表示显示三位小数)。

如果不存在 iDigits,右键新建一个字符串值(REG_SZ)并命名为 iDigits,再设置值为 3。

重启资源管理器或系统

按 Ctrl + Shift + Esc 打开任务管理器,找到“Windows 资源管理器”,右键选择“重新启动”。

或直接重启电脑使设置生效。

验证效果
右键查看文件/文件夹属性,检查大小是否显示三位小数(如 1.234 MB)。

注意事项
全局影响:此修改会调整系统中所有依赖区域格式的数字显示,例如部分应用程序中的数字、货币等。

兼容性问题:并非所有Windows版本均支持此调整,部分系统可能忽略此设置或仅影响特定场景。

单位限制:文件资源管理器可能根据单位(KB/MB/GB)自动调整小数位数,例如在GB单位下默认显示更多小数位。

替代方案
如果上述方法无效或不愿影响其他数字格式,可考虑:

使用第三方工具
例如 Folder Size、TreeSize 等工具,支持自定义文件大小显示格式。

脚本或批处理
通过PowerShell脚本获取精确大小并格式化输出。

请确保理解风险后再操作,必要时创建系统还原点。

点评

是呀,10 PE 没有效果哦  详情 回复 发表于 4 天前
我试一试 谢谢  详情 回复 发表于 4 天前
尝试修改了注册表,好像没啥效果  发表于 4 天前

评分

参与人数 1无忧币 +5 收起 理由
yyz2191958 + 5

查看全部评分

回复

使用道具 举报

44#
发表于 4 天前 | 只看该作者

问问deepseek :

如何通过修改注册表,在windows系统里实现查看文件夹或文件属性时,文件夹或文件大小显示小数点后3位数?
回复

使用道具 举报

43#
 楼主| 发表于 4 天前 | 只看该作者
martin313 发表于 2025-2-19 11:04
这个属性要显示小数点位数,通过修改系统注册表,也是可以实现的

我需要3位小数点

点评

要通过修改注册表在Windows中实现文件或文件夹大小显示小数点后三位数,可以尝试以下方法。但需注意,此操作可能影响系统中其他数字的显示格式,请谨慎操作并提前备份注册表。 步骤如下: 打开注册表编辑器 按  详情 回复 发表于 4 天前
问问deepseek : 如何通过修改注册表,在windows系统里实现查看文件夹或文件属性时,文件夹或文件大小显示小数点后3位数?  详情 回复 发表于 4 天前
回复

使用道具 举报

42#
 楼主| 发表于 4 天前 | 只看该作者
martin313 发表于 2025-2-19 11:04
这个属性要显示小数点位数,通过修改系统注册表,也是可以实现的

能不能给出代码?我需要
回复

使用道具 举报

41#
 楼主| 发表于 4 天前 | 只看该作者
martin313 发表于 2025-2-19 11:03
就是这个干啥用?

有一些时候,需要精确一些
回复

使用道具 举报

40#
发表于 4 天前 | 只看该作者


这个属性要显示小数点位数,通过修改系统注册表,也是可以实现的

点评

我需要3位小数点  详情 回复 发表于 4 天前
能不能给出代码?我需要  详情 回复 发表于 4 天前
回复

使用道具 举报

39#
发表于 4 天前 | 只看该作者


就是这个干啥用?

点评

有一些时候,需要精确一些  详情 回复 发表于 4 天前
回复

使用道具 举报

38#
 楼主| 发表于 4 天前 | 只看该作者
martin313 发表于 2025-2-19 10:09
就是有无小数点,有啥用呢???

...

3.png (16.5 KB, 下载次数: 0)

3.png

点评

这个属性要显示小数点位数,通过修改系统注册表,也是可以实现的  详情 回复 发表于 4 天前
就是这个干啥用?  详情 回复 发表于 4 天前
回复

使用道具 举报

37#
发表于 4 天前 来自手机 | 只看该作者
更改路径x盘是你的pe
回复

使用道具 举报

36#
发表于 4 天前 | 只看该作者
yyz2191958 发表于 2025-2-18 17:31
刚好3位数字的时候,没有小数点

就是有无小数点,有啥用呢???

点评

...  详情 回复 发表于 4 天前
回复

使用道具 举报

35#
发表于 4 天前 | 只看该作者
无论是bat、vbs、powershell,实质上还是通过先获取文件或文件夹的属性,根据属性里显示的大小再转换输出的
回复

使用道具 举报

34#
 楼主| 发表于 5 天前 | 只看该作者
zyy 发表于 2025-2-18 14:34
PE 测试确实有用,但不明白这个有什么用?
此电脑 中右键“属性” 或 “鼠标”指针选择后就会出现文件大小 ...

刚好3位数字的时候,没有小数点

点评

VBS代码中,Fixed(2) 表示保留2位小数点;PowerShell代码中,{0:N2} 表示保留2位小数点。  详情 回复 发表于 4 天前
VBS代码中,Fixed(2) 表示保留2位小数点;PowerShell代码中,{0:N2} 表示保留2位小数点。  发表于 4 天前
就是有无小数点,有啥用呢???  详情 回复 发表于 4 天前
回复

使用道具 举报

33#
发表于 5 天前 | 只看该作者
zyy 发表于 2025-2-18 14:34
PE 测试确实有用,但不明白这个有什么用?
此电脑 中右键“属性” 或 “鼠标”指针选择后就会出现文件大小 ...


按楼主的意思是用发送到

但我也是不明白,这个有啥用
回复

使用道具 举报

32#
发表于 5 天前 | 只看该作者
PE 测试确实有用,但不明白这个有什么用?
此电脑 中右键“属性” 或 “鼠标”指针选择后就会出现文件大小;为什么还需要拖一下

点评

刚好3位数字的时候,没有小数点  详情 回复 发表于 5 天前
按楼主的意思是用发送到 但我也是不明白,这个有啥用  详情 回复 发表于 5 天前
回复

使用道具 举报

31#
发表于 5 天前 | 只看该作者
powershell 法:

@echo off
setlocal enabledelayedexpansion

:: 参数检查
if "%~1"=="" (
    echo 请将文件或文件夹拖放到此脚本上。
    pause
    exit /b
)

:: 获取规范路径并验证存在性
set "item=%~f1"
if not exist "!item!" (
    echo 路径不存在: "!item!"
    pause
    exit /b
)

:: 特殊字符转义处理
set "safe_item=!item:'=''!"
set "safe_item=!safe_item:\=\\!"
set "safe_item=!safe_item:""=\"!"

:: 计算大小
set "size=0"
if exist "!item!\" (
    for /f "delims=" %%a in ('powershell -Command "$sum=0; $path='%safe_item%'; Get-ChildItem -LiteralPath $path -Recurse -File -ErrorAction SilentlyContinue -Force | %%{ $sum += $_.Length }; $sum" 2^>^&1') do (
        set "size=%%a"
    )
) else (
    for %%F in ("!item!") do set "size=%%~zF"
)

:: 错误捕获
if "!size!"=="" (
    echo 无法计算大小,请检查路径权限
    pause
    exit /b
)

:: 单位转换优化
for /f "tokens=1-2" %%i in ('powershell -Command "$bytes=!size!; if($bytes -eq 0){'0 Bytes'}else{$units='Bytes,KB,MB,GB,TB,PB,EB' -split ','; $i=[math]::Floor([math]::Log($bytes,1024)); $i=[math]::Min($i,6); $num=$bytes/[math]::Pow(1024,$i); $fmt= if($i -eq 0){'{0} {1}'}else{'{0:N2} {1}'}; $fmt -f $num,$units[$i]}"') do (
    set "value=%%i"
    set "unit=%%j"
)

:: 结果输出
echo.
echo.   大小: !value! !unit!
echo.
pause

点评

此“powershell 法”代码,可以轻松让deepseek转成lua代码,实现在pe中使用!  发表于 5 天前
回复

使用道具 举报

30#
发表于 5 天前 | 只看该作者
这个是deepseek修改的,也一样好用:

@set @x=1 /* &@echo off
set "v=%~1"
if not defined v exit /b
set "q=0"
if exist "%v%\" (
    set "q=1"
) else if exist "%v%" (
    for %%v in ("%v%") do set "v=%%~zv"
) else (
    set "v=%v:,=%"
)
cscript /nologo /e:jscript "%~f0" "%v%" %q%
pause>nul 2>nul&exit /b */
n=0, v=WSH.arguments, q=v(1);
if (q==1) { z=WSH.createObject('scripting.fileSystemObject').getFolder(v(0)).size }
else z=+v(0);
while (z/1024>=1) {z/=1024; n++; if (n==6) break;}
z=z.toFixed(2)+[' 字节',' KB',' MB',' GB',' TB',' PB',' EB'][n];
WSH.echo(z), WSH.quit();

点评

上午deepseek总是显示服务器繁忙,呵呵  发表于 5 天前
回复

使用道具 举报

29#
发表于 5 天前 | 只看该作者
本帖最后由 ppll2030 于 2025-2-18 12:48 编辑

哎呀。来晚了。
看koko的pe写着支持vbs,用VBS写了一个,也发上来留个记录吧

  1. Set fso = CreateObject("Scripting.FileSystemObject")
  2. obj = WScript.Arguments(0)

  3. If fso.FileExists(obj) Then
  4.     fileSize = fso.GetFile(obj).Size
  5.     fileConvertSize = ConvertSize(fileSize)
  6.     WScript.Echo "文件大小: " & fileConvertSize
  7. Else
  8.     folderSize = GetFolderSize(obj)
  9.     folderConvertSize = ConvertSize(folderSize)
  10.     WScript.Echo "文件夹大小: " & folderConvertSize
  11. End If

  12. Function GetFolderSize(folderPath)
  13.     totalSize = 0
  14.     Set folder = fso.GetFolder(folderPath)
  15.     For Each subFolder In folder.SubFolders
  16.         totalSize = totalSize + GetFolderSize(subFolder.Path)
  17.     Next
  18.     For Each file In folder.Files
  19.         totalSize = totalSize + file.Size
  20.     Next
  21.     GetFolderSize = totalSize
  22. End Function

  23. Function ConvertSize(Size)
  24. units = Array("字节", "KB", "MB", "GB", "TB", "PB", "EB")
  25. i = 0
  26. While Size >= 1024 And i < UBound(units)
  27.     Size = Size / 1024
  28.     i = i + 1
  29. Wend
  30. ConvertSize = Round(Size, 2) & " " & units(i)
  31. End Function
复制代码


点评

PE支持vbs,还是很容易实现的  发表于 5 天前
回复

使用道具 举报

28#
 楼主| 发表于 5 天前 | 只看该作者
martin313 发表于 2025-2-18 12:36
楼主还没回答我的问题:这用来干嘛呢?

快捷方式放到 “发送到”,我喜欢自动:字节、KB、MB、GB ... ...,还能自定义小数点位数
回复

使用道具 举报

27#
发表于 5 天前 | 只看该作者
楼主还没回答我的问题:这用来干嘛呢?

点评

快捷方式放到 “发送到”,我喜欢自动:字节、KB、MB、GB ... ...,还能自定义小数点位数  详情 回复 发表于 5 天前
回复

使用道具 举报

26#
发表于 5 天前 | 只看该作者


我这里测试了一下,也OK。不错

批处理用到了VBS,PE需要支持VBS才行
回复

使用道具 举报

25#
发表于 5 天前 | 只看该作者
hua_wuxin 发表于 2025-2-18 08:22
if not defined v (exit/b) else (set "q=0" &set v=%v:"=%)
dir /ad %1 >nul 2>&1
if %errorlevel% equ  ...

看来是 目录的判断方式上有点问题,遇到X盘时
if exsit  "PATH"\
回复

使用道具 举报

24#
 楼主| 发表于 5 天前 | 只看该作者
hua_wuxin 发表于 2025-2-18 11:27
之前括号的处理还是有点问题,%1为空(例如直接双击批处理)时会报错。推荐如下改动:
@set @x=1 /* &@ech ...

谢谢 我再试一试

点评

我这里测试了一下,也OK。不错 批处理用到了VBS,PE需要支持VBS才行  详情 回复 发表于 5 天前
回复

使用道具 举报

23#
发表于 5 天前 | 只看该作者
本帖最后由 hua_wuxin 于 2025-2-18 12:15 编辑

之前括号的处理还是有点问题,%1为空(例如直接双击批处理)时会报错。推荐如下改动:
@set @x=1 /* &@echo off  &::【代码(最前)和(最后)好像不能有字符。(z.toFixed(2)————两位小数)】
if "%~1"=="" exit /b 3
if not exist %1 exit /b 3
set "v=" &set "v=%~1"
set "q=0"
dir /ad %1 >nul 2>&1
if %errorlevel% equ 0 (set "q=1") else if exist "%v%" (for %%v in ("%v%") do set "v=%%~zv") else set "v=%v:,=%"
cscript /nologo /e:jscript "%~f0" "%v%" %q%

(以下未动,略)


点评

谢谢 我再试一试  详情 回复 发表于 5 天前
回复

使用道具 举报

22#
发表于 5 天前 | 只看该作者
yyz2191958 发表于 2025-2-18 11:07
好像可以了,我慢慢认真测试先,非常感谢


但不知道,这用来干嘛呢?
回复

使用道具 举报

21#
发表于 5 天前 | 只看该作者
yyz2191958 发表于 2025-2-18 11:07
好像可以了,我慢慢认真测试先,非常感谢

恭喜恭喜
回复

使用道具 举报

20#
 楼主| 发表于 5 天前 | 只看该作者
hua_wuxin 发表于 2025-2-18 10:57
不是
红字是改动的地方 黑字是你原文识别改动的位置用

好像可以了,我慢慢认真测试先,非常感谢

点评

但不知道,这用来干嘛呢?  详情 回复 发表于 5 天前
恭喜恭喜  详情 回复 发表于 5 天前
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2025-2-23 05:02

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表