我将以这种格式运行一个包含用户名,密码和主机IP作为参数的批处理脚本:
用户名:密码@主机IP
但我的密码包含@
符号。因此它输出无法找到主机。
例如:
batch.bat root:pass@q@10.120.36.65
我如何从批处理脚本中执行此操作?
答案 0 :(得分:0)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table id="myTable">
<thead>
<tr>
<th>Food Item</th>
<th>Portion Size</th>
</tr>
</thead>
<tbody></tbody>
</table>
输出示例:
@echo off
setlocal
for /F "tokens=1,2* delims=:@" %%a in ("%1") do (
set "user=%%a"
set "pass=%%b"
set "host=%%c"
)
for /F "tokens=1* delims=@" %%a in ("%host%") do (
if "%%b" neq "" (
set "pass=%pass%@%%a"
set "host=%%b"
)
)
echo Username: "%user%"
echo Password: "%pass%"
echo HostIP: "%host%"
答案 1 :(得分:0)
以下是我的批处理代码,用于将字符串拆分为用户名,密码和主机IP地址或主机名:
@echo off
setlocal EnableDelayedExpansion
if "%~1" == "" goto OutputError
set "NameUser="
set "Password="
set "HostNameIP="
for /F "tokens=1,2 delims=:" %%I in ("%~1") do (
set "NameUser=%%I"
set "Password=%%J"
set "HostNameIP=%%J"
)
rem Is there a colon at all in string and something after the colon?
if "%Password%" == "" goto OutputError
rem Is there at least one At sign in argument string after first colon?
if "%Password:@=%" == "%HostNameIP%" goto OutputError
rem Get host name/IP which is the string after last At sign.
rem The argument string should not end with an At sign.
:GetHostNameIP
set "HostNameIP=%HostNameIP:*@=%"
if "%HostNameIP%" == "" goto OutputError
if not "%HostNameIP:@=%" == "%HostNameIP%" goto GetHostNameIP
rem Get password which is the string between first colon and last
rem At sign which is here the password string with all (hopefully
rem only one) @HostNameIP removed from password string.
set "Password=!Password:@%HostNameIP%=!"
rem Is there a password in argument string?
if "%Password%" == "" goto OutputError
echo The user name is: %NameUser%
echo The password is: %Password%
echo Host name/IP is: %HostNameIP%
goto EndBatch
:OutputError
echo.
echo ERROR: username:password@host not specified correct.
:EndBatch
echo.
endlocal
pause
密码字符串可以包含1个甚至更多At符号。由于电子邮件地址被用作密码,因此很可能总是只有1 @
,但这对密码不利。
当然,要求使用3个单独的参数(用户名,密码和主机IP地址)执行批处理文件会更容易,因为没有必要将单个参数字符串拆分为3个单独的字符串。
此外,我认为从批处理文件中执行的控制台应用程序需要username:password@hostip
。大多数此控制台应用程序还支持另一种变体,即与此连接变体相比,至少为密码指定用户名,密码和主机IP地址,并使用分隔的字符串。如果控制台应用程序支持,那么使用单独指定的3个字符串调用控制台应用程序绝对是一个好主意。
注意:USERNAME
是一个预定义的环境变量,不应该用于此批处理文件,这是使用NameUser
的原因。
要了解使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并完全阅读为每个命令显示的所有帮助页面。
call /?
...解释%~1
(第一个参数字符串,不包含双引号)echo /?
endlocal /?
for /?
goto /?
pause /?
rem /?
set /?
setlocal /?