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

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

  [复制链接]
发表于 2025-2-18 08:22:31 | 显示全部楼层 |阅读模式
悬赏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, 下载次数: 2, 下载积分: 无忧币 -2

最佳答案

查看完整内容

if not defined v (exit/b) else (set "q=0" &set v=%v:"=%) 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% 事后更正:之前括号处理仍有问题,加粗红字为修正。推荐24楼改法。 另外注意%v%里含有括号时,例如“X:\Program Files (x86)”,批处理会出错,需要替换为^(和^)。 set "v=" &se ...
发表于 2025-2-18 08:22:32 | 显示全部楼层
本帖最后由 hua_wuxin 于 2025-2-18 15:07 编辑

if not defined v (exit/b) else (set "q=0" &set v=%v:"=%)
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%

事后更正:之前括号处理仍有问题,加粗红字为修正。推荐24楼改法
另外注意%v%里含有括号时,例如“X:\Program Files (x86)”,批处理会出错,需要替换为^(和^)。
set "v=" &set "v=%1"
if defined v set v=%v:(=^(% &set v=%v:)=^)%
if not defined v (exit/b) else (set "q=0" &set v=%v:"=%)


点评

看来是 目录的判断方式上有点问题,遇到X盘时 if exsit "PATH"\  详情 回复 发表于 2025-2-18 12:17
是完整代码吗?我拖到图标无显示  详情 回复 发表于 2025-2-18 10:49
我试一试先 谢谢  详情 回复 发表于 2025-2-18 10:43

评分

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

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2025-2-18 08:23:06 | 显示全部楼层
占楼备用
回复

使用道具 举报

发表于 2025-2-18 08:52:29 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

发表于 2025-2-18 09:00:04 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

发表于 2025-2-18 09:00:42 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

发表于 2025-2-18 09:06:47 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

 楼主| 发表于 2025-2-18 09:12:36 | 显示全部楼层
martin313 发表于 2025-2-18 09:00
@echo off
setlocal enabledelayedexpansion

'powershell' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
'powershell' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
大小:
请按任意键继续. . .
回复

使用道具 举报

发表于 2025-2-18 09:21:45 | 显示全部楼层
用个对比文件不行吗?

点评

对比文件有什么用?  详情 回复 发表于 2025-2-18 09:25
回复

使用道具 举报

发表于 2025-2-18 09:23:23 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

 楼主| 发表于 2025-2-18 09:25:58 | 显示全部楼层
忧心的启 发表于 2025-2-18 09:21
用个对比文件不行吗?

对比文件有什么用?
回复

使用道具 举报

发表于 2025-2-18 10:10:14 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

 楼主| 发表于 2025-2-18 10:29:47 | 显示全部楼层
martin313 发表于 2025-2-18 10:10
这个批处理中,@x=1 是干啥的?会不会这个影响到了X盘的路径问题

我不知道,这些代码是 “批处理之家” 得到的

你说的是有可能的
回复

使用道具 举报

 楼主| 发表于 2025-2-18 10:32:13 | 显示全部楼层
martin313 发表于 2025-2-18 10:10
这个批处理中,@x=1 是干啥的?会不会这个影响到了X盘的路径问题

将@x=1弄成@M=1,情况还是一样
回复

使用道具 举报

 楼主| 发表于 2025-2-18 10:43:40 | 显示全部楼层
hua_wuxin 发表于 2025-2-18 10:32
if not defined v (exit/b) else (set "q=0" &set v=%v:"=%)
dir /ad %1 >nul 2>&1
if %errorlevel% equ  ...

我试一试先 谢谢
回复

使用道具 举报

 楼主| 发表于 2025-2-18 10:49:54 | 显示全部楼层
hua_wuxin 发表于 2025-2-18 10:32
if not defined v (exit/b) else (set "q=0" &set v=%v:"=%)
dir /ad %1 >nul 2>&1
if %errorlevel% equ  ...

是完整代码吗?我拖到图标无显示

点评

不是 红字是改动的地方 黑字是你原文识别改动的位置用  详情 回复 发表于 2025-2-18 10:57
回复

使用道具 举报

发表于 2025-2-18 10:50:46 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

发表于 2025-2-18 10:55:50 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

发表于 2025-2-18 10:57:10 | 显示全部楼层
yyz2191958 发表于 2025-2-18 10:49
是完整代码吗?我拖到图标无显示

不是
红字是改动的地方 黑字是你原文识别改动的位置用

点评

好像可以了,我慢慢认真测试先,非常感谢  详情 回复 发表于 2025-2-18 11:07
回复

使用道具 举报

 楼主| 发表于 2025-2-18 10:57:52 | 显示全部楼层
martin313 发表于 2025-2-18 10:55
X盘的系统文件或文件夹,无法计算大小,我猜是因为PE运行情形下,批处理没权限的原因吧

文件夹没有问题,就是文件不行
回复

使用道具 举报

 楼主| 发表于 2025-2-18 11:07:56 | 显示全部楼层
hua_wuxin 发表于 2025-2-18 10:57
不是
红字是改动的地方 黑字是你原文识别改动的位置用

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

使用道具 举报

发表于 2025-2-18 11:09:24 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

发表于 2025-2-18 11:09:54 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

发表于 2025-2-18 11:27:20 | 显示全部楼层
本帖最后由 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%

(以下未动,略)


点评

谢谢 我再试一试  详情 回复 发表于 2025-2-18 11:48
回复

使用道具 举报

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

谢谢 我再试一试
回复

使用道具 举报

发表于 2025-2-18 12:17:44 | 显示全部楼层
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"\
回复

使用道具 举报

发表于 2025-2-18 12:35:32 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

发表于 2025-2-18 12:36:41 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

 楼主| 发表于 2025-2-18 12:43:30 | 显示全部楼层
martin313 发表于 2025-2-18 12:36
楼主还没回答我的问题:这用来干嘛呢?

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

使用道具 举报

发表于 2025-2-18 12:47:14 | 显示全部楼层
本帖最后由 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
复制代码


回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-9-10 11:19

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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