batch-file – 在Windows批处理文件中转义用户输入
发布时间:2020-12-14 02:49:27 所属栏目:Windows 来源:网络整理
导读:我有一个 Windows批处理文件,接受密码作为用户输入: SET /P PASSWORD=Password: 此密码可能包含需要转义的字符!然后使用CALL将PASSWORD变量传递给其他批处理文件 CALL Foo.Bat %PASSWORD% 如何确保特殊字符作为参数进行转义和正确传递?例如,如果用户输入
我有一个
Windows批处理文件,接受密码作为用户输入:
SET /P PASSWORD=Password: 此密码可能包含需要转义的字符!然后使用CALL将PASSWORD变量传递给其他批处理文件 CALL Foo.Bat %PASSWORD% 如何确保特殊字符作为参数进行转义和正确传递?例如,如果用户输入!%“£$”我希望%1在Foo.bat中为!%“£$”. 解决方法
这是一个很好的挑战,但这是先进的批量技术.
我会在这里使用更简单的方法,使用延迟扩展而不发送内容,只发送变量名称. 即使使用特殊字符,这也绝对安全. call foo.bat password Foo.bat —————– Setlocal EnableDelayedExpansion Echo !password! 编辑:解决原始问题, 在通过CALL将内容发送到第二批文件之前,有必要准备内容. 但后来我发现了一种在CALL阶段之后使用百分比扩展的简单方法. @echo off setlocal DisableDelayedExpansion rem set /p "complex=Complex Input " set "complex=xx! & "!^&"ab^^ " ^^^^cd%%" setlocal EnableDelayedExpansion call :prepareForCallBatch complex PreparedParam echo Send =!PreparedParam!# set complex echo( call ShowParam.bat %%PreparedParam%% exit /b :: Prepare special characters &|<>"^ for a batch call :prepareForCallBatch set "temp=!%~1!" set "temp=!temp:^=^^!" set "temp=!temp:&=^&!" set "temp=!temp:|=^|!" set "temp=!temp:<=^<!" set "temp=!temp:>=^>!" set "temp=!temp:"=^^"!" set "%~2=!temp!" exit /b 要在ShowParam.bat中查看真实参数,我使用类似的东西 @echo off setlocal set prompt= @echo on REM # %* # (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- xaml – 如何更改特定元素的TextBox占位符文本颜色,而不是全
- windows-phone-8 – 在发布模式下构建nuget包?
- windows – 通过2003R2中的组策略将_default_ printer设置为
- .net – 为什么要使用Microsoft AntiXSS库?
- Laravel 5.2在Windows 10上不支持php 7
- windows-phone-7 – 使用RestSharp对Trello API进行身份验证
- windows-server-2003 – 什么原因导致重复的ACK记录?
- windows – 禁用Ctrl在jupyter notebook中输入sublime keym
- active-directory – 如何找出每天锁定特定AD帐户的原因?
- windows-server-2008 – 如何阻止对终端服务器(Win2008R2)的