我正在编写一个cmd脚本,用于使用keytool创建自签名证书。我想检查别名是否已存在于密钥库中,
所以我需要执行以下命令并将其存储在变量中。因此,如果变量为null,我可以假设别名不存在,
keytool -list -v -storepass "%KEYSTORE_PASS%" -keystore cert/seurat-keystore.jks ^| find "Alias name: 1"
我试过
FOR /F "tokens=* delims=" %%A IN ('keytool -list -v -storepass "%KEYSTORE_PASS%" -keystore cert/seurat-keystore.jks ^| find "Alias name: 1"') DO SET Variable=%%A
echo %Variable%
但它会显示回声。我使用下面的代码
在shell脚本中实现了相同的功能 if [ -n "$(keytool -list -v -storepass "${KEYSTORE_PASS}" -keystore cert/seurat-keystore.jks | grep 'Alias name: 1')" ] ; then
fi
如何在cmd脚本中实现相同的功能?任何帮助都会非常明显!
答案 0 :(得分:0)
对不起。你写道“如果变量为null,我可以假设别名不存在”。如果echo %variable%
命令显示ECHO OFF,则变量为null!我认为你的代码是正确的,但稍微改变一下:
FOR /F "tokens=* delims=" %%A IN ('keytool -list -v -storepass "%KEYSTORE_PASS%" -keystore cert/seurat-keystore.jks ^| find "Alias name: 1"') DO SET Variable=%%A
if "%Variable%" == "" (
echo The alias doesn't exists
) else (
echo The alias is: %Variable%
)
另一种方式是:
if not defined Variable (
echo The alias doesn't exists
) else (
echo The alias is: %Variable%
)
答案 1 :(得分:0)
由于我没有得到这个keytool
的东西,我不知道它是什么或做了什么。但我用ECHO
命令替换它,它对我有用:
FOR /F "tokens=* delims=" %%A IN ('ECHO Alias name: 1 ^| find "Alias name: 1"') DO SET Variable=%%A
echo %Variable%
输出结果为:
Alias name: 1
当我将替换命令更改为ECHO Alias name: 2
时,输出结果不同:
ECHO is off.
表示变量未初始化,这是预期的,因为FIND
命令此次无法在输入流中找到指定的字符串。
结论:keytool
的输出在运行时可能不包含搜索的术语,因此,您的变量不会被初始化。