Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 将命令输出重定向到cmd脚本中的变量_Shell_Batch File_Certificate_Cmd_Keytool - Fatal编程技术网

Shell 将命令输出重定向到cmd脚本中的变量

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

我正在编写一个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%
但它会显示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%
!变数。您应该从一开始就提供以前的信息。。。