2017-10-06 77 views
0

我正在製作擴展CMD。雖然函數在這裏並不重要。只有當檢測到+時才意味着運行特殊命令,否則只是將該變量輸出到控制檯中。變量不按預期打印

@set "maininput=" 
@set /p "mainInput= Enter in a command here ~ " 
@set "SEALDETECT=%mainInput:~0,1%" 
@if "%SEALDETECT%"=="+" goto SealConsole 
%maininput% 

這在大多數情況下工作正常,但如果我輸入「echo %date%」它只是輸出「%date%」代替。我希望它實際上是呼應變量,像"echo %date%「將輸出的實際日期

我敢肯定這個問題是有另一個變量中的一個變量。我需要一種方法來解決這個問題。

+0

你的腳本不會顯示'test'變量!如果你只顯示了腳本的一部分,那麼我建議你[編輯你的問題](https://stackoverflow.com/posts/46598080/edit)以包含更多內容。如果你在'Set/P'提示符下輸入'echo%test%',那麼你可能需要輸入'echo %% test %%'來轉義每個百分號字符 – Compo

+0

我將變量改爲環境日期變量。 –

+0

您可能仍然需要輸入'echo %% date %%' – Compo

回答

0

有幾種方法來解決這個問題的最簡單的一種是啓用延遲擴展,然後使用!var!顯示一個可變值而不是%var%

@echo off 
setlocal EnableDelayedExpansion 

echo Use ^^^!var^^^! to show var value 

:nextLine 
set "maininput=" 
set /p "mainInput=Enter in a command here ~ " 
if not defined maininput exit /B 
set "SEALDETECT=%mainInput:~0,1%" 
if "%SEALDETECT%"=="+" goto SealConsole 
%maininput% 
goto nextLine 

:SealConsole 
echo Special command: %maininput:~1% 
goto nextLine 

實施例:

Use !var! to show var value 
Enter in a command here ~ echo !date! 
06/10/2017 
Enter in a command here ~ 
+0

@CrologMark:這是在'echo!date!'輸入後的唯一解決方案,它根據請求顯示當前日期。也許我誤解了一些東西? **':('** – Aacini

+0

不,謝謝,我誤讀了另外一個,我打算使用這個 謝謝 –

+0

輸入'echo Oops ^^^!'在'Oops中顯示感嘆號!' – JosefZ