我有一个简单的BATCH脚本,用于执行SHA256校验和测试。
@echo off
setlocal enabledelayedexpansion
::Batch script to compare a file SHA256 checksum to a given one.
::Usage: checksum [FILE] [VALUE]
set filepath=%1
set checksum=%2
set idx=0
for /f %%F in ('certutil -hashfile %filepath% SHA256') do (
set "out!idx!=%%F"
set /a idx += 1
)
set filechecksum=%out1%
if /i %checksum%==%filechecksum% (
echo %checksum% validated.
) else (
echo Checksum validation falied.
exit 1
)
我在一个Dockerfile中调用它来验证自己:
FROM mcr.microsoft.com/windows/servercore:1909-amd64
COPY checksum.bat /
RUN /checksum.bat /checksum.bat 2b9dadc0b74dc25bd94552817b68c57df9c324ba28656c10ec787adf5611f3ec
这是我的输出结果:
$ docker image build -t gsscoder/test:v0_0 .
Sending build context to Docker daemon 3.072kB
Step 1/3 : FROM mcr.microsoft.com/windows/servercore:1909-amd64
---> 9c2075893694
Step 2/3 : COPY checksum.bat /
---> 2224010db712
Step 3/3 : RUN /checksum.bat /checksum.bat 2b9dadc0b74dc25bd94552817b68c57df9c324ba28656c10ec787adf5611f3ec
---> Running in eb60dd5fe468
Checksum validation falied.
The command 'cmd /S /C /checksum.bat /checksum.bat 2b9dadc0b74dc25bd94552817b68c57df9c324ba28656c10ec787adf5611f3ec' returned a non-zero code: 1
如果我删除
RUN
命令,并直接在容器或主机操作系统中尝试,则会得到预期的正确结果。.\checksum.bat .\checksum.bat 2b9dadc0b74dc25bd94552817b68c57df9c324ba28656c10ec787adf5611f3ec
2b9dadc0b74dc25bd94552817b68c57df9c324ba28656c10ec787adf5611f3ec validated.
在构建过程中为什么字符串比较或其他操作会失败?
我非常好奇,请问有什么解释吗?
提前感谢您的任何帮助!
附言:我知道可以通过其他方式(例如使用PowerShell),但我想知道为什么采用这种方法不起作用。