分部:克服批量数学的2 GB限制

时间:2013-10-24 03:34:34

标签: batch-file

我有一个 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!
))

3 个答案:

答案 0 :(得分:2)

您可以使用纯批次将数字分成两组,每组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

事实上,您可以通过这种方式将数字除以无限数量的数字!

答案 1 :(得分: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)));

试试吗?... ;)

答案 2 :(得分:1)

gawk可以轻松地进行从简单到复杂的任何文本处理

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

它在任何操作系统包括windows,linux下工作正常。

C:\dos>gawk " {printf(\"%s %d\n\", $1 ,$2/1024)}" output.txt
Windows 6390395
Linux 4428372
MacOS 3480
Ubuntu 8042623