返回列表 发帖

[数值计算] 【已解决】怎样才能在bat窗口输入数字,就自动显示:B或KB或MB或GB?谢谢

本帖最后由 yyz219 于 2025-2-21 08:29 编辑

完美解决了(获取文件、文件夹大小、输入数字进行计算————都行)
@set @x=1 /* &@echo off &::【代码(最前)和(最后)好像不能有字符。(z.toFixed(3)————3位小数)】
::==============================================================================================
if "%~1"=="" goto :Q
::【双击,输入数字————计算】【拖到图标 Ctrl+V ————文件(夹)的大小】
::==============================================================================================
echo.%~1|clip.exe
:Q
set/p "路径(数字)=文件(夹)路径 或 数字:"
::==============================================================================================
set "v=" &set "v=%路径(数字)%"
set "q=0"
dir /ad "%路径(数字)%" >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();COPY
=============================================
拖-文件(夹)到图标(有小数).bat
@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();COPY
=============================================
@set @x=1 /* &@echo off
(for /d %%d in (*) do cscript /nologo /e:jscript "%~f0" "%%~fd")>结果列表.txt
exit/b */
v=WSH.arguments, fso=WSH.createObject('scripting.fileSystemObject');
n=0, z=fso.getFolder(v(0)).size; while(z/1024>1){z/=1024;n++};
z=z.toFixed(2)+['B','KB','MB','GB','TB'][n];
WSH.echo(z+'        '+v(0)), WSH.quit();
=================================================
在一个文件夹里面运行以后,输出:
15.40MB        D:\桌面\Desktop\!!!\webp-转-png-JPG
328.00B        D:\桌面\Desktop\!!!\新建文件夹
203.65KB        D:\桌面\Desktop\!!!\模拟点关闭按钮
==================================================
怎样才能在bat窗口输入一个数字,就跟上面一样自动显示:B或KB或MB或GB(还希望显示小数)?谢谢
我是小白,希望老师多多帮助

本帖最后由 aloha20200628 于 2025-2-16 23:23 编辑

回复 1# yyz219

以下代码存为 test.bat 运行,代码第7行中(2)设定保留小数位数=2,可自定义...
@set @x=1 /* &@echo off &set "v=" &set/p "v=输入一个数字:"
if not defined v exit/b
cscript /nologo /e:jscript "%~f0" %v%
pause&exit/b */
n=0, v=WSH.arguments, z=+v(0);
while (z/1024>=1) {z/=1024; n++; if (n==6) break;}
z=z.toFixed(2)+['B','KB','MB','GB','TB','PB','EB'][n];
WSH.echo(z), WSH.quit();COPY
1

评分人数

TOP

@echo off
echo,
echo,请输入数字选择
echo [0] 显示当前文件夹内文件夹大小
echo [1] 退出
echo,
set /p _select=输入:
if %_select% == 0 set "_path_=%cd:\=\\%\\"
if %_select% == 0 (
echo,
dir /b /ad|(mshta "javascript:with(new ActiveXObject('Scripting.FileSystemObject')){GetStandardStream(1).Write(GetStandardStream(0).readall().replace(/(.+)\r\n/g,function($0,$1){n=0, z=getFolder($1).size;while(z/1024>1){z/=1024;n++};z=z.toFixed(2)+['B','KB','MB','GB','TB'][n];return z+'        '+'%_path_%'+$1+'\r\n';}));close()}"|more)
)
if %_select% == 1 (
rem nil
)
pause&exit/bCOPY
1

评分人数

    • yyz219: 我需要的不是这样技术 + 1

TOP

回复 2# aloha20200628

成功,非常感谢
我是小白,希望老师多多帮助

TOP

回复 2# aloha20200628
我现在还有一些问题,老师能不能帮解决:
1.现在的代码不能够识别  319,480,686  能不能修改为能够识别
2.如果用BAT获取一个文件的大小(比如:D:\傲梅分区助手单文件.exe),自动显示B、KB、MB、GB。又应该怎样?
3.如果用BAT获取一个文件夹的大小(比如:D:\!exe依赖),自动显示B、KB、MB、GB。又应该怎样?
我是小白,希望老师多多帮助

TOP

回复 1# yyz219

新版如下》可处理 ‘逗号/文件与目录’ ...
@set @x=1 /* &@echo off &set "v=" &set/p "v=输入:"
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&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)+['B','KB','MB','GB','TB','PB','EB'][n];
WSH.echo(z), WSH.quit();COPY
1

评分人数

TOP

回复 6# aloha20200628


    非常感谢,完美解决
我是小白,希望老师多多帮助

TOP

返回列表