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

时间:2013-11-20 21:51:22

标签: batch-file cmd user-input var expansion

我尝试在快捷方式中调用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%

我想念什么?

4 个答案:

答案 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

如您所见,您只能在一行代码中记录变量的先前值。你能做的最好的事情是:

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?"

你的问题应该解决了。

莫纳

答案 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