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