1

我有一个output.txt文件,其中包含以下内容:

Windows        6543765432
Linux          4534653463
MacOS          3564325
Ubuntu         8235646255

我想创建一个批处理脚本,搜索 output.txt 中的所有数值并将它们除以 1024(结果中只需要整数部分而不是小数位),以便可以将 KB 中的内存更改为 MB(克服批处理数学的 2 GB 限制)尝试以下但没有输出..

@echo off
setlocal enabledelayedexpansion
(for /f "tokens=1,2 delims=" %%a in (output.txt) do (
set /a MB=!b!/1024
echo %%a !MB!
))
4

3 回答 3

2

您可以通过纯 Batch 将数字分成两组,每组 5 位,并相应地操作每组:

@echo off
setlocal EnableDelayedExpansion

(for /f "tokens=1,2" %%a in (output.txt) do (
   call :KBtoMB %%b MB=
   echo %%a !MB!
))
goto :EOF

:KBtoMB KB MB=
set KB=%1
set KBhigh=%KB:~0,-5%
set KBlow=%KB:~-5%
for /L %%i in (1,1,4) do if "!KBlow:~0,1!" equ "0" set KBlow=!KBlow:~1!
set /A %2=KBhigh/1024*100000 + (KBhigh%%1024*100000+KBlow)/1024
exit /B

事实上,你可以用这种方法来分割一个无限位数的数字!

于 2013-10-24T07:13:08.733 回答
1

gawk can be easily for any text hanlding from simple to complex

gawk " {printf(\"%s %d\n\", $1 ,$2/1024)}" output.txt

and it works fine under any OS include windows, linux.

C:\dos>gawk " {printf(\"%s %d\n\", $1 ,$2/1024)}" output.txt
Windows 6390395
Linux 4428372
MacOS 3480
Ubuntu 8042623
于 2013-10-24T05:19:28.787 回答
1
@if (@CodeSection == @Batch) @then

@echo off
setlocal enabledelayedexpansion
set JScall=Cscript //nologo //E:JScript "%~F0"
for /f "tokens=1,2" %%i in (output.txt) do (
      for /f %%a in ('%JScall% "%%j/1024"') do set a=%%a
      for /f "delims=." %%z in ("!a!") do set a=%%z
      echo %%i     !a!>>newout.txt
   )
)
goto :EOF

@end
WScript.Echo(eval(WScript.Arguments.Unnamed.Item(0)));

试试看?...;)

于 2013-10-24T04:05:20.773 回答