首页 > 解决方案 > 在不知道位置批次的情况下转义特殊字符

问题描述

我需要使用参数执行批处理文件。这里出现的问题是我不确定什么特殊字符以及它会出现在什么地方。我可能已经在这里完成了所有答案,但仍然无法解决问题。任何帮助表示赞赏。

我试图在批处理文件中运行的命令

CALL E:\myscript.bat -run e:\param -password %PASSWORD%

其中 PASSWORD 是存储密码的变量,它可以在任何位置包含任何特殊字符。

标签: batch-filecmd

解决方案


也许我理解你的问题,应该是:

  • 您想确定每个参数代表什么,而不必有特定的参数位置。

或者:

  • 您想找到一种解决方案来处理参数,以便它们不会因为包含特殊字符而导致错误

无论如何,我都会回答。

您有一些替代方法,根据您处理代码的方式及其目的,有些可能比其他方法更理想。如果您确定论点及其所代表的内容,您可以:

set args=%*

有些事情可能会帮助您在使用通配符但没有其影响的情况下使您的代码稳定。喜欢:

set "args=%args:&=^&"

但最重要的是保持代码不带引号。事实上,如果您不在脚本中使用 CALL,则没有必要使用它。

set "args=%args:"=%

接下来要做的是识别参数。我们既可以用粗略的方式也可以用更简单的方式来做到这一点,即用自己的变量定义每个参数,例如:arg1=%1, arg2=%2...

您现在可以将所有参数传递到治疗和重建会话中。

假设您要识别 -password:

---在 FOR 循环中捕获并在每个 arg 上执行相同的过程---(我只能猜测,因为您没有显示代码或类似的东西)

if "!arg[%%x]:~0,1!" equ "-" (
if "!arg[%%x]:-=!" equ "password" set /a x=%%x+1&set "password=!arg[%x%]!"
if "!arg[%%x]:-=!" equ "run" set /a x=%%x+1&set "run=!arg[%x%]!"
...
)

显然,在这段代码中有一些可以改进的地方,但是你几乎没有展示任何东西供我们用作回答的参考,所以我能做的就是这些。

希望这会有所帮助,
K。


推荐阅读