如何在Batch中用管道运算符替代SED实现字符串替换?
Batch中无需SED或变量,通过管道移除CertUtil哈希输出的空格
要解决不同版本CertUtil输出带空格分隔哈希的问题,同时避免依赖SED或在主脚本中使用变量,可以用Batch原生的延迟扩展配合管道子进程来处理:
CertUtil -hashfile SomeFile.txt sha256 | findstr /v "hash" | cmd /v:on /c "set/p str=&echo !str: =!"
命令拆解
CertUtil -hashfile SomeFile.txt sha256:生成目标文件的SHA256哈希,部分版本会输出空格分隔的十六进制字符串findstr /v "hash":过滤掉包含"hash"的提示行,仅保留哈希内容行cmd /v:on /c "set/p str=&echo !str: =!":启动一个临时cmd进程并启用延迟扩展,读取管道传递的哈希行到临时变量str,替换所有空格为空后输出。这里的变量仅在子进程中存在,不会污染主脚本的变量环境
如果需要直接在FOR循环中使用,也可以用内置的for /f配合延迟扩展(临时变量仅在循环块内有效):
for /f "skip=1 delims=" %%h in ('CertUtil -hashfile SomeFile.txt sha256') do ( setlocal enabledelayedexpansion echo !%%h: =! endlocal )
注:
skip=1是跳过CertUtil输出的第一行提示信息,无需额外用findstr过滤
内容的提问来源于stack exchange,提问作者SomekindaRazzmatazz
相关产品推荐
相关产品推荐

