我尝试在快捷方式中调用cmd并使用set / p用户输入来执行ping操作,但是我没有解析var。我尝试从简单到增强,但没有好处:
%SystemRoot%\system32\cmd.exe /k set /p XYZ=IP? && ping %XYZ%
%SystemRoot%\system32\cmd.exe /k Setlocal EnableDelayedExpansion & set /p XYZ=IP? && ping %XYZ%
%SystemRoot%\system32\cmd.exe /k Setlocal EnableDelayedExpansion & set /p XYZ=IP? && ping %~XYZ%
%SystemRoot%\system32\cmd.exe /k Setlocal EnableDelayedExpansion & set /p XYZ=IP? && ping %%XYZ%
我想念什么?
答案 0 :(得分:1)
在一行中使用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
如您所见,您只能在一行代码中记录变量的先前值。你能做的最好的事情是:
setlocal
set var=%~1
if "%1"=="" "var=Ip: "
set /p target="%var%"
ping %target%
Endlocal
然后在你的cmd中,快捷键只需输入:
cmd /c "call C:\pingr.bat Ip?"
你的问题应该解决了。
莫纳
答案 1 :(得分:1)
set /p XYZ=IP? && call ping %XYZ%
答案 2 :(得分:1)
如果您希望延迟扩展,则必须使用!XYZ!
,并且SETLOCAL仅在批处理上下文中工作,而不是在命令行中工作。您必须使用CMD.EXE /V:ON
选项为命令行启用延迟扩展。此外,必须引用命令字符串,或者必须转义&&
,以便在SET命令之后而不是在CMD.EXE命令之后执行PING。
%SystemRoot%\system32\cmd.exe /v:on /k "set /p XYZ=IP? && ping !XYZ!"
答案 3 :(得分:0)
你可以试试这个。我测试了它,就像一个魅力。在输出文件中,您将获得时间,日期和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