wordpress   发布时间:2022-04-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了batch-file – 在Windows批处理文件中转义用户输入大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

我有一个 Windows批处理文件,接受密码作为用户输入: SET /P passworD=password: 此密码可能包含需要转义的字符!然后使用CALL将passworD变量传递给其他批处理文件 CALL Foo.bat %passworD% 如何确保特殊字符作为参数进行转义和正确传递?例如,如果用户输入!%“£$”我希望%1在Foo.bat中为!%“£$”. 这是一个很好的挑战,但这是先进
我有一个 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这样的东西foo.bat%preparedVariable%
使用CALL foo.bat!preparedVariable似乎更好!
但即便如此,我仍未能通过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中查看真实参数,我使用类似的东西
ShowParam.bat

@echo off
setlocal
set prompt=
@echo on
REM # %* #

大佬总结

以上是大佬教程为你收集整理的batch-file – 在Windows批处理文件中转义用户输入全部内容,希望文章能够帮你解决batch-file – 在Windows批处理文件中转义用户输入所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。