如何逃脱!在.bat文件的设置行中

时间:2015-06-23 17:26:44

标签: batch-file set escaping

我的密码中包含function onObjectSelected(e) { console.log(e.target.get('type')); } canvas.on('object:selected', onObjectSelected); 。无论我尝试过什么,它都会从!下降。我的脚本正在使用!,因此我不确定这是否是我遇到此问题的原因。这是我的代码:

ENABLEDELAYEDEXPANSION

当我运行脚本时,我得到set password=cccvvv! echo %password%

我尝试过以下方法:

cccvvv

似乎没什么用。

如何让它继续保留变量中的set password=cccvvv!! set password=cccvvv^^!

3 个答案:

答案 0 :(得分:1)

测试

@echo off
    setlocal enableextensions enabledelayedexpansion

    rem Escaped exclamation
    set "password=this is a test^!"

    rem See the environment block
    set password

    rem Echo with normal expansion
    echo %password%

    rem Echo with delayed expansion
    echo !password!

当延迟扩展处于活动状态时,您需要转义感叹号以将其存储在变量中,并且当延迟扩展处于活动状态时,解析器通常会在使用没有延迟扩展语法的变量时将其删除。

答案 1 :(得分:0)

我建议你用PowerShell包装这个解决方案;)

@echo off
Title Mask/hide password entry *****
Mode con cols=60 lines=5 
:CheckPassword
cls & color 0B & echo.
set MyPassword=cccvvv!
set "psCommand=powershell -Command "$pword = read-host 'Enter your password ' -AsSecureString ; ^
    $BSTR=[System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($pword); ^
        [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)""
for /f "usebackq delims=" %%p in (`%psCommand%`) do set password=%%p
if %MyPassword%==%password% (Goto:Good) else (Goto:Bad)
exit/b

::***********************************************************************************************
:Good
Cls & Color 0A
echo(
echo                      Good Password
TimeOut /T 1 /NoBreak>nul
Exit
::***********************************************************************************************
:Bad
Cls & Color 0C
echo(
echo                       Bad password
TimeOut /T 1 /NoBreak>nul
Goto:CheckPassword
::***********************************************************************************************

答案 2 :(得分:0)

如果在前面添加^符号!设置密码时标记。在写这个答案之前我会检查它。我还创建了一个test.bat文件来测试它 代码:

@echo off
set password=cccvvv!
echo %password%
pause

确切输出:

cccvvv!
Press any key to continue . . .