批处理 - 将输入直接传递到 if 语句中

伦特

澄清……这是原始代码此时的样子

echo[
echo         1 - Scan with service guess (-sF,-sV,-pN)
echo         2 - Quick nmap scan (May be blocked by firewalls)
echo         3 - Try to avoid Firewall (Very Slow)
echo         4 - Operation system (Will attempt to guess Operation System)
echo         5 - Choose own parameters (inactive at this time)
echo         6 - Go Back
echo[
set /p scan=Which kind of scan? 
if /I "%scan%"=="1" nmap.exe %target% -sF -T5 -Pn -sV --traceroute
if /I "%scan%"=="2" nmap.exe %target% -sS
if /I "%scan%"=="3" nmap.exe %target% --scan-delay 1 --badsum
if /I "%scan%"=="4" nmap.exe %target% -O
if /I "%scan%"=="5" goto :para
if /I "%scan%"=="6" goto :choice
if /I "%scan%"=="" goto :scan
pause
goto :scan
:para
cls
Echo put in the parameters for nmap to use
set /P para= which parameters to use?
if /I "%para%"=="*what should be here" nmap.exe %target% %para%
if /I "%para%=="" goto :para

我想要做的是,如果用户选择输入自己的参数(5),它会转到 :para 然后要求用户输入自己的参数以供 nmap 使用。

所以我的问题是 - 'if /I "%para%"=="*what should be here"' 句子中的引号之间应该有什么,以将该输入直接传递到 nmap 行中..

有没有想知道 'if /I "%para%"=="" goto :para' 的目的是为了防止错误,如果用户只是按 Enter 而不写任何东西..

麻古

您需要“引用比较的双方”并使用变量内容para

if /I "%para%"=="*user input"

奇怪的是,和你if对抗的方式完全一样scan......

(我不知道你为什么“引用每一行”。看起来很奇怪 - 我什至不打算尝试......)


啊 - 您似乎想检查para有效性。

Echo put in the parameters for nmap to use
set "para="
set /P para= which parameters to use?
if NOT DEFINED para goto para
call :check %para%
if not defined error nmap.exe %target% %para%&goto :eof
echo %error% is invalid
goto para

:check
set "error="
if "%~1"=="" goto :eof
if "%~1"=="-sS" goto parmok
if "%~1"=="-Pn" goto parmok
...
set "error=%~1"
goto :eof

:parmok
shift
goto check

首先,para在请求输入之前清除如果用户按下刚Enter然后para将保持不变,也不会被清除

接下来,检查是否para已定义。如果它是未定义的,那么用户按下只是Enter这样再次要求输入(?可能去扫描?)

请注意,a 中的冒号goto不是必需的,除非有特殊说明goto :eof,意思是“转到批处理文件的末尾”

一旦确定para不为空,则公正call :check并传递的内容para这将执行一个名为 的子程序check如果子例程名称没有冒号,则子例程在check.bat. 如果它有一个冒号,则子程序是“内部的”——该批代码中的一个标签。

该例程:check将设置一个变量error为或是空(如果没有错误),或者什么,这将是错误的参数。因此,如果error未定义,则nmap使用输入的参数执行,然后(转到 :eof 终止批处理 - 我不知道你想在这里做什么......) - 注意&连接指令。

如果error设置,则显示它并返回标签:para(您可能会放在pause这里,否则cls会清除消息)

最后我们有:check例行程序。

%~1 意思是“从提供给子例程的第一个参数中删除任何封闭的引号”

所以 - 设置error然后检查"%~1"每个有效的参数元素 - 我只展示了 2,因为我不知道这里的要求。只需添加更多检查来代替...

如果发现参数有效,则转到标签:parmok如果所有测试都失败,则将其放入error并终止例程(返回到call :checkwith errorset non-empty之后的行,指示错误)。

在 处:parmok,我们使用 ashift删除第一个参数并将扩孔器沿一个位置移动。返回:check测试新的第一个参数,直到检查完所有参数。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

无法将批处理脚本的参数正确传递到循环语句中的命令中

来自分类Dev

IF语句中断批处理脚本

来自分类Dev

批处理脚本在IF语句中失败

来自分类Dev

Windows批处理if语句与用户输入

来自分类Dev

在批处理文件中的for语句中嵌套if语句

来自分类Dev

输入语句中的if语句

来自分类Dev

比较If语句中的批处理文件循环变量

来自分类Dev

批处理If / Else语句

来自分类Dev

批处理的嵌套 IF 语句

来自分类Dev

使用If语句和键盘输入的批处理文件

来自分类Dev

将批处理 If/ELSE 语句分成多行 - 难以阅读代码

来自分类Dev

直接在Powershell中测试批处理语句,而无需将调用包装在批处理文件中

来自分类Dev

在if语句中处理变量-PHP

来自分类Dev

在if语句中处理布尔函数

来自分类Dev

将变量从批处理传递到VBS

来自分类Dev

将变量从批处理传递到Powershell

来自分类Dev

jdbc批处理不同的语句

来自分类Dev

批处理-if语句和负值

来自分类Dev

批处理if语句有问题

来自分类Dev

批处理-If语句导致错误

来自分类Dev

批处理脚本中的if语句

来自分类Dev

JOOQ批处理语句中的绑定调用数是否有上限?

来自分类Dev

登录批处理脚本-FOR语句中的嵌套变量无法正确解析

来自分类Dev

批处理-IF语句中使用的变量中的引号和括号

来自分类Dev

登录批处理脚本-FOR语句中的嵌套变量无法正确解析

来自分类Dev

在批处理文件中的if语句中调用python函数时出现奇怪的行为

来自分类Dev

带变量的批处理语句中缺少操作数错误

来自分类Dev

Windows批处理中IF语句中的变量前的斜杠是什么原因?

来自分类Dev

为什么带问号 (?) 的字符串没有打印在 for 批处理语句中

Related 相关文章

热门标签

归档