Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 分区:克服批处理数学的2GB限制_Batch File - Fatal编程技术网

Batch file 分区:克服批处理数学的2GB限制

Batch file 分区:克服批处理数学的2GB限制,batch-file,Batch File,我有一个output.txt文件,其中包含以下内容: Windows 6543765432 Linux 4534653463 MacOS 3564325 Ubuntu 8235646255 我想创建一个批处理脚本,它搜索output.txt中的所有数值,并将它们除以1024(结果中只需要整数部分,而不是小数点),这样就可以将KB内存更改为MB(克服批处理数学的2GB限制) 正在尝试以下操作,但没有输出 @echo off set

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

Windows        6543765432
Linux          4534653463
MacOS          3564325
Ubuntu         8235646255
我想创建一个批处理脚本,它搜索output.txt中的所有数值,并将它们除以1024(结果中只需要整数部分,而不是小数点),这样就可以将KB内存更改为MB(克服批处理数学的2GB限制) 正在尝试以下操作,但没有输出

@echo off
setlocal enabledelayedexpansion
(for /f "tokens=1,2 delims=" %%a in (output.txt) do (
set /a MB=!b!/1024
echo %%a !MB!
))
试试看<代码>;)


试试看<代码>;)

对于从简单到复杂的任何文本,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

从简单到复杂,任何文本都可以轻松地处理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

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

事实上,你可以用这种方法将一个数字除以无限位数

您可以通过纯批量将数字分成两组,每组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

事实上,你可以用这种方法将一个数字除以无限位数

是否有帮助?您可以查看tooset/a的变通方法部分对32位有限制,gawk可能会在这方面帮助您,它是windows/linux版本。我已回答了您关于Dos help的评论/问题?您可以查看tooset/a的变通方法部分对32位有限制,gawk可能会在这方面帮助您,它是windows/linux版本。我回答了您对@Nephi的评论/问题。错误:无效数字。数字的精度限制为32位。您使用的数字必须已经太大了。。。给我一点时间。你不需要为命令设置两个
为/f“delims=。”%%a在(“%JScall%”“%%j/1024“')中设置一个=%%a
,你的代码还有一个不需要的右括号…你的观点是什么。我喜欢用一个额外的括号来表示遗漏的数字,为了清楚起见,我分别解决了十进制问题。@Nephi..错误:无效数字。数字的精度限制为32位。您使用的数字必须已经太大了。。。给我一点时间。你不需要为
命令设置两个
为/f“delims=。”%%a在(“%JScall%”“%%j/1024“')中设置一个=%%a
,你的代码还有一个不需要的右括号…你的观点是什么。我喜欢加一个括号来表示遗漏的数字,为了清楚起见,我分别解决了小数点的问题。。!我真的很喜欢使用“gawk”…但我只能在windows server上安装它。gawk.exe只有一个二进制文件,如果您有权在服务器上写入,只需复制,那么一切都正常。它正在工作。。!我真的很喜欢使用“gawk”…但我只能在windows server上安装它。gawk.exe只有一个二进制文件,如果您有权在服务器上写入,只需复制,那么一切都可以。