0

我正在编写一个用于使用 keytool 创建自签名证书的 cmd 脚本。我想检查别名是否已经存在于 keystore 中,

所以我需要执行下面的命令并将其存储在一个变量中。因此,如果变量为空,我可以假设别名不存在,

  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 脚本中实现相同的功能?任何帮助将非常明显!

4

2 回答 2

0

打扰一下。您写道“如果变量为空,我可以假设别名不存在”。如果echo %variable%命令 show ECHO OFF,则变量为空!我认为你的代码是正确的,但稍微改变一下:

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%
)
于 2012-07-05T01:03:32.543 回答
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运行时可能不包含搜索词的输出,因此,您的变量没有被初始化。

于 2012-07-05T18:09:54.197 回答