Eu tenho o código abaixo:
second.bat
Arquivo
echo %~1
echo %~2
first.bat
Arquivo
@ECHO OFF &SETLOCAL
@SETLOCAL EnableExtensions EnableDelayedExpansion
set /p User=Enter Username:
set /p Password=Enter Password:
call second.bat %User% %Password%
Se entradas do usuário Admin
como nome de usuário e Admin!23
como senha a saída produzida em second.bat
O eco é como abaixo:
Admin Admin23
Como posso obter os caracteres especiais também no second.bat
arquivo como abaixo?
Admin Admin!23
Respostas:
2 para resposta № 1Depende das suas possibilidades.
Você tem permissão para mudar o second.bat
Arquivo?
Então você deve transferir os valores por referências (variáveis) em vez de valores, como CALL
não funciona muito bem com valores complexos.
Solução 1:
Então você pode mudar o second.bat para
@echo off
echo !user!, !password!
Solução 2:
Se você não tem permissão para alterar second.bat e requer a senha como um parâmetro de chamada, você pode alterar first.bat
para
@ECHO OFF
setlocal EnableExtensions EnableDelayedExpansion
set /p User=Enter Username:
set /p Password=Enter Password:
set ^"password=!password:"=""!"
setlocal DisableDelayedExpansion
call second.bat "%%User%%" "%%Password%%"
exit /b
Só falha quando as citações na senha são usadas, então elas são duplicadas.
Solução 3:
Injetando código para second.bat sem modificar o arquivo.
Assumindo second.bat parece
@echo off
setlocal EnableDelayedExpansion
set "user=%~1"
set "pwd=%~2"
echo !pwd!
Altere first.bat para:
set ^"Inject=." & (set pwd=^!password^!) & rem #"
call second.bat "%%User%%" %%Inject%%
Isso pode manipular qualquer senha, como a linha em second.bat
set "pwd=%~2"
será modificado na mosca para
set "pwd=." & (set pwd=!password!) & rem #"
1 para resposta № 2
Você não precisa de DelayedExpansion até esse ponto! Se você precisar depois, ative depois! Se você repetir a última linha do seu exemplo, verá que o !
deveria estar faltando também.
Como DelayedExpansion usa o ponto de exclamação como símbolo especial, ele é excluído.