我需要调用一个接受密码作为其参数之一的脚本。每当密码包含,
时,它都被视为分隔符,密码将被分成两个参数,当它包含!
所有特殊字符时,将被省略。我尝试将它们包含在 中 '
,"
并预处理密码以同时使用^
和进行转义^^
。不幸的是,没有任何效果。如何在密码中保留这些特殊字符?
问问题
479 次
1 回答
2
你是对的,延迟扩展必须(暂时)关闭才能正常工作。!
必须转义(对于稍后延迟的部分)并引用处理其余部分:
@echo off
setlocal enabledelayedexpansion
REM --- get parameter ---
setlocal disabledelayedexpansion
set "x=%~1"
endlocal & set "x=%x:!=^!%"
REM --- end get param ---
set x
echo "!x!"
输出:
C:\TEST>test.bat "pass,!<& %|>word"
x=pass,!<& %|>word
"pass,!<& %|>word"
主要技巧是线endlocal & set "x=%x:!=^!%"
。该set
命令仍然在没有延迟扩展的情况下被解析,但在之后执行endlocal
(因为在执行任何操作之前解析了整行 - 是的,奇怪的事情......)
于 2020-04-22T06:49:14.687 回答