Shell 将命令输出重定向到cmd脚本中的变量
我正在编写一个cmd脚本,用于使用keytool创建自签名证书。我想检查密钥库中是否已经存在别名 所以我需要执行下面的命令并将其存储在变量中。因此,如果变量为null,我可以假设别名不存在Shell 将命令输出重定向到cmd脚本中的变量,shell,batch-file,certificate,cmd,keytool,Shell,Batch File,Certificate,Cmd,Keytool,我正在编写一个cmd脚本,用于使用keytool创建自签名证书。我想检查密钥库中是否已经存在别名 所以我需要执行下面的命令并将其存储在变量中。因此,如果变量为null,我可以假设别名不存在 keytool -list -v -storepass "%KEYSTORE_PASS%" -keystore cert/seurat-keystore.jks ^| find "Alias name: 1" 我试过了 FOR /F "tokens=* delims=" %%A IN ('keyt
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%
但它会显示echo off。与我在shell脚本中使用以下代码实现的相同
if [ -n "$(keytool -list -v -storepass "${KEYSTORE_PASS}" -keystore cert/seurat-keystore.jks | grep 'Alias name: 1')" ] ; then
fi
如何在cmd脚本中实现相同的功能?任何帮助都是值得感激的 对不起。您写道“如果变量为null,我可以假设别名不存在”。如果echo%variable%
命令显示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%
)
因为我没有这个
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
当我将replacement命令更改为ECHO Alias name:2
时,输出不同:
ECHO is off.
这意味着变量没有初始化,这是意料之中的,因为FIND
命令这次在输入流中找不到指定的字符串
结论:运行
keytool
时,keytool
的输出可能不包含搜索项,因此,您的变量没有初始化。乍一看,它看起来像for
循环中引用的字符串,请查看keytool
产生的确切输出是什么?或者,如果您认为它太大而无法发布,那么通过FIND
解析后,它还剩下什么部分?如果我对%%A执行echo,它将打印值,但如果对变量执行echo,它将是“”。我也试过同样的命令。为什么设置变量=%%A不起作用?知道吗?这是你的echo%Variable%
命令放在IF或FOR中?如果是这样,那么问题与延迟扩展有关。要解决此问题,请在开头插入setlocalenabledelayedexpansion
命令,并通过echo!更改echo%Variable%
!变数代码>。您应该从一开始就提供以前的信息。。。