快捷方式调用cmd并使用用户输入进行命令,例如ping



我尝试在快捷方式中调用cmd,并使用set/p用户输入执行ping,但我没有解析var。我试着从简单到增强,但效果不佳:

%SystemRoot%system32cmd.exe /k set /p XYZ=IP? && ping %XYZ%
%SystemRoot%system32cmd.exe /k Setlocal EnableDelayedExpansion & set /p XYZ=IP? && ping %XYZ%
%SystemRoot%system32cmd.exe /k Setlocal EnableDelayedExpansion & set /p XYZ=IP? && ping %~XYZ%
%SystemRoot%system32cmd.exe /k Setlocal EnableDelayedExpansion & set /p XYZ=IP? && ping %%XYZ%

我想什么?

set /p XYZ=IP? && call ping %XYZ%

在一行中使用set命令时,通过使用&,直到该行结束时才会设置变量。要演示这一点,请将其作为批处理文件运行

输入:

set var=FALSE
set var=TRUE & Echo var state: %var%
Echo var state: %var%
Echo ----------------------------------------
set var=
set /p "var=: " & if not defined var Echo The variable var has no value
if defined var Echo The variable var is: %var%

输出:

var state: FALSE
var state: TRUE
----------------------------------------
The variable var has no value
The variable var is: test

正如您所看到的,您只能在一行代码中对变量的前一个值进行acc。你能做的最好的事情是:

C: \pingr.bat

setlocal 
set var=%~1
if "%1"=="" "var=Ip: "
set /p target="%var%"
ping %target%
Endlocal

然后在cmd中,只需键入快捷键:

cmd /c "call C:pingr.bat Ip?"

你的问题应该得到解决。

Mona

如果希望延迟扩展,则必须使用!XYZ!,并且SETLOCAL只能在批处理上下文中工作,而不能在命令行中工作。必须使用CMD.EXE /V:ON选项为命令行启用延迟扩展。此外,命令字符串必须加引号,或者必须转义&&,以便在SET命令之后而不是在CMD.EXE命令之后执行PING。

%SystemRoot%system32cmd.exe /v:on /k "set /p XYZ=IP? && ping !XYZ!"

你可以试试这个。我测试了一下,效果很好。在输出文件中,您将获得时间、日期和ICMP测试信息。


 @echo Type an IP address. At the end press ctrl+c and choose N
 @echo off
 setlocal
 set var=%~1
 if "%1" ==" "var=Ip: "
 set /p target="%var%"
 for /F "delims=" %%i in ('ping %target% -t') do call :format "%%i"
 goto :done
 :format
 echo %date% %time% %1 1>> output.txt
 :done

相关内容

  • 没有找到相关文章

最新更新