无忧启动论坛

标题: 【已解决】这个bat的显示,可以弄到中间吗?谢谢 [打印本页]

作者: yyz2191958    时间: 2025-3-15 11:38
标题: 【已解决】这个bat的显示,可以弄到中间吗?谢谢
本帖最后由 yyz2191958 于 2025-3-16 07:43 编辑

完美解决了:
@set @x=1 /* &@echo off &::【代码(最前)和(最后)好像不能有字符。(z.toFixed(3)————3位小数)】
::==============================================================================================
if "%~1"=="" goto :Q
::【双击,输入数字————计算】【拖到图标:复制 ————文件(夹)的路径】
::==============================================================================================
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();  // 如果不需要居中,则删行首的 “//” 及下一行以后的全部


// 计算屏幕中间位置
var screenHeight = 25; // 假设屏幕高度为25行
var screenWidth = 80;  // 假设屏幕宽度为80列
var output = z;
var outputLength = output.length;
var spaces = Math.floor((screenWidth - outputLength) / 2);
var emptyLines = Math.floor((screenHeight - 1) / 2);


// 输出空行
for (var i = 0; i < emptyLines; i++) {
    WSH.echo("");
}


// 输出空格(使用循环代替 repeat)
var spaceString = "";
for (var i = 0; i < spaces; i++) {
    spaceString += " ";
}


// 输出结果
WSH.echo(spaceString + output);
WSH.quit();
========================
原来的问题:
这个bat的显示,可以弄到中间吗?谢谢




@set @x=1 /* &@echo off &::【代码(最前)和(最后)好像不能有字符。(z.toFixed(3)————3位小数)】
::==============================================================================================
if "%~1"=="" goto :Q
::【双击,输入数字————计算】【拖到图标:复制 ————文件(夹)的路径】
::==============================================================================================
echo.%~1|clip.exe
:Q
set/p "路径(数字)=文件(夹)路径 或 数字:"
cls
::==============================================================================================
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();





作者: martin313    时间: 2025-3-15 11:41
完全可以

echo.    加上需要显示的内容
作者: yyz2191958    时间: 2025-3-15 11:43
martin313 发表于 2025-3-15 11:41
完全可以

echo.    加上需要显示的内容

麻烦你看下代码,里面好像不全是BAT代码
作者: martin313    时间: 2025-3-15 11:58
yyz2191958 发表于 2025-3-15 11:43
麻烦你看下代码,里面好像不全是BAT代码

图片20250315115806.png (65.08 KB, 下载次数: 11)

图片20250315115806.png

作者: yyz2191958    时间: 2025-3-15 12:03
martin313 发表于 2025-3-15 11:58

在哪里修改?这样修改?谢谢
作者: martin313    时间: 2025-3-15 12:04
yyz2191958 发表于 2025-3-15 11:43
麻烦你看下代码,里面好像不全是BAT代码

@set @x=1 /* &@echo off
echo.
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];

// 计算屏幕中间位置
var screenHeight = 25; // 假设屏幕高度为25行
var screenWidth = 80;  // 假设屏幕宽度为80列
var output = z;
var outputLength = output.length;
var spaces = Math.floor((screenWidth - outputLength) / 2);
var emptyLines = Math.floor((screenHeight - 1) / 2);

// 输出空行
for (var i = 0; i < emptyLines; i++) {
    WSH.echo("");
}

// 输出空格(使用循环代替 repeat)
var spaceString = "";
for (var i = 0; i < spaces; i++) {
    spaceString += " ";
}

// 输出结果
WSH.echo(spaceString + output);
WSH.quit();


注意事项:
如果屏幕的实际高度和宽度与代码中假设的 screenHeight 和 screenWidth 不一致,可以动态获取屏幕大小(例如通过 PowerShell 或其他方法),然后传递给 JScript。

如果需要更精确的居中效果,可以考虑使用 PowerShell 或第三方工具来实现更复杂的控制。
作者: yyz2191958    时间: 2025-3-15 12:05
martin313 发表于 2025-3-15 12:04
@set @x=1 /* &@echo off
echo.
set "v=%~1"

谢谢,我慢慢琢磨
作者: martin313    时间: 2025-3-15 12:06
请自行调整

var screenHeight = 25; // 假设屏幕高度为25行
var screenWidth = 80;  // 假设屏幕宽度为80列

达到你想要的显示效果
作者: yyz2191958    时间: 2025-3-15 12:14
martin313 发表于 2025-3-15 12:06
请自行调整

var screenHeight = 25; // 假设屏幕高度为25行

成功了  再次感谢
作者: 绿光科技    时间: 2025-3-15 13:06
这个代码有意思呀
作者: 小灰兔    时间: 2025-3-15 14:41
感谢分享
作者: yzszh64    时间: 2025-3-15 14:58
谢谢各位。
作者: 2012zhiwen    时间: 2025-3-15 15:17
你好,正确的批处理可以完整贴出不。并且做好分界线说明,谢谢。
作者: plutoshen    时间: 2025-3-15 15:35
为什么要放中间?有什么必须的原因?
作者: yzydys    时间: 2025-3-15 16:09
谢谢大牛的分享!!!
作者: lovelyelfpop    时间: 2025-4-5 17:44
感谢分享
作者: Juliany    时间: 2025-4-15 22:49
  1. @echo off
  2. chcp 65001 >nul
  3. setlocal enabledelayedexpansion

  4. :: 获取控制台宽度
  5. for /f "tokens=2 delims=:" %%a in ('mode con ^| find "Columns"') do set cols=%%a

  6. :: 要输出的文本
  7. set "text=居中的文本"

  8. :: 计算居中位置
  9. set /a spaces=(cols - 1) / 2
  10. set "padding="
  11. for /l %%i in (1,1,!spaces!) do set "padding=!padding! "

  12. :: 输出居中文本
  13. echo.!padding!!text!

  14. pause
复制代码

作者: helllo2025    时间: 2025-4-16 00:51
感谢分享




欢迎光临 无忧启动论坛 (http://bbs.c3.wuyou.net/) Powered by Discuz! X3.3