2012-07-04 113 views
0

我在寫一個使用keytool創建自簽名證書的cmd腳本。我想檢查是否已經存在於密鑰庫中的別名,將命令輸出重定向到cmd腳本中的變量

所以我需要執行下面的命令並將它存儲在一個變量中。所以,如果變量爲空我可以假設,別名犯規存在,

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

乍一看,它看起來像'for'循環中引用的字符串,請參見[這裏](http://stackoverflow.com/questions/5006290/dos-batch-script-for-f-processing-filename- with-spaces) –

+0

'keytool'產生的輸出是什麼?或者,如果你覺得它太大而不能發佈,在用'FIND'解析之後它的哪部分仍然存在? –

回答

0

對不起。你寫了「如果變量爲空,我可以假設別名不存在」。如果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% 
) 
+0

如果我回顯%% A它打印的值,但如果回聲變量是「」。我剛剛嘗試了上述相同的命令。爲什麼設置變量= %% A不工作?任何想法 ? – Mojoy

+1

這是你的'echo%Variable%'命令放置在一個IF或FOR?如果是這樣,那麼問題與延遲擴展有關。爲了解決這個問題,在開始處插入'setlocal EnableDelayedExpansion'命令並通過'echo!Variable!'修改'echo%Variable%'。你應該從一開始就提供以前的信息...... – Aacini

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的輸出在運行時可能不包含搜索到的術語,結果導致變量未初始化。

相關問題