2017-10-06 51 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