在下面的脚本中,作为输出的一部分,我得到:
=-2147483648+312704
无效数字。数字仅限于32位的精度。
这显然在有符号的32位数字范围内(我还尝试了2147483648+312704,认为只支持无符号32位),但是得到了相同的错误。
奇怪的是,这个脚本在WindowsXP上运行得很好,但是当我在Windows7上尝试运行它时,就会出现上述错误。
批处理为什么不执行此操作呢?
为了方便起见,以下是代码...
这显然在有符号的32位数字范围内(我还尝试了2147483648+312704,认为只支持无符号32位),但是得到了相同的错误。
奇怪的是,这个脚本在WindowsXP上运行得很好,但是当我在Windows7上尝试运行它时,就会出现上述错误。
批处理为什么不执行此操作呢?
为了方便起见,以下是代码...
setlocal EnableDelayedExpansion
@set TEMPDIR="%CD%\temp739123834543"
@set ADDR=-2147483648
@set HEXADDR=
@set /a ZIPSLEEP_MS=0
@del frontScreenImages.c
@del frontScreen.zip
@mkdir %TEMPDIR%
for %%f in (*.png) do (
echo %%~nf
@call toHex ADDR HEXADDR
echo "ADDR:!HEXADDR!"
convertFrontScreenPng.exe %%~nf.png frontScreenImages.c transpose append "0x!HEXADDR!" "__xdata_rom" "#pragma required="
rem set BINFILE=%TEMPDIR%\a!HEXADDR!_%%~nf.bin
set BINFILE=%TEMPDIR%\a80000000_frontScreenImages.bin
echo "BIN:!BINFILE!"
convertFrontScreenPng.exe %%~nf.png !BINFILE! transpose append
for %%A in (!BINFILE!) do set /a ADDR=%ADDR%+%%~zA
set /a ZIPSLEEP_MS=!ZIPSLEEP_MS! + 500
)
@echo Set objArgs = WScript.Arguments > _zipIt.vbs
@echo InputFolder = objArgs(0) >> _zipIt.vbs
@echo ZipFile = objArgs(1) >> _zipIt.vbs
@echo CreateObject("Scripting.FileSystemObject").CreateTextFile(ZipFile, True).Write "PK" ^& Chr(5) ^& Chr(6) ^& String(18, vbNullChar) >> _zipIt.vbs
@echo Set objShell = CreateObject("Shell.Application") >> _zipIt.vbs
@echo Set source = objShell.NameSpace(InputFolder).Items >> _zipIt.vbs
@echo objShell.NameSpace(ZipFile).CopyHere(source) >> _zipIt.vbs
@echo wScript.Sleep !ZIPSLEEP_MS! >> _zipIt.vbs
@CScript _zipIt.vbs %TEMPDIR% "%CD%\frontScreen.zip"
@del _zipIt.vbs
@rmdir %TEMPDIR% /s /q
sleep 3
set /a ADDR+=%%~zA
,这可以防止命令行解析器使 MIN_INT 值无效化。出于某种奇怪的原因,Windows 7 的set /a
支持从-2147483648
到2147483647
的值,但在等式中只允许从-2147483647
到2147483647
的值。 - David Ruhmann