转义cmd中的powershell字符



我想执行一个ping扫描,这是一个powershell命令:

$NET="192.168.111";for($i=1;$i -lt 255;$i++){$command="ping -n 1 -w 100 $NET.$i > nul 2>&1 && echo $NET.$i";start-process -nonewwindow "cmd" -argumentlist "/c $command" -redirectstandardoutput "tmp$i.txt"};cat tmp*.txt > sweep.txt

我需要在cmd中做这件事,我已经尝试过了:

Wihout报价

powershell -c $NET="192.168.111";for($i=1;$i -lt 255;$i++){$command="ping -n 1 -w 100 $NET.$i > nul 2>&1 && echo $NET.$i";start-process -nonewwindow "cmd" -argumentlist "/c $command" -redirectstandardoutput "tmp$i.txt"};cat tmp*.txt > sweep.txt

带1个多臂报价

powershell -c "$NET="192.168.111";for($i=1;$i -lt 255;$i++){$command="ping -n 1 -w 100 $NET.$i > nul 2>&1 && echo $NET.$i";start-process -nonewwindow "cmd" -argumentlist "/c $command" -redirectstandardoutput "tmp$i.txt"};cat tmp*.txt > sweep.txt"

具有3个双quoutes

powershell -c """$NET="192.168.111";for($i=1;$i -lt 255;$i++){$command="ping -n 1 -w 100 $NET.$i > nul 2>&1 && echo $NET.$i";start-process -nonewwindow "cmd" -argumentlist "/c $command" -redirectstandardoutput "tmp$i.txt"};cat tmp*.txt > sweep.txt"""

逃离&

powershell -c "$NET="192.168.111";for($i=1;$i -lt 255;$i++){$command="ping -n 1 -w 100 $NET.$i > nul 2>&1 && echo $NET.$i";start-process -nonewwindow "cmd" -argumentlist "/c $command" -redirectstandardoutput "tmp$i.txt"};cat tmp*.txt > sweep.txt"

还没有成功。

谢谢!

这对我很有效,我在引号之前使用了反勾号来转义。即使这可以用本机Powershell命令来完成,但由于您要求特定的东西,它就在这里。

$NET="192.168.111"
for($i=1;$i -lt 255;$i++)
{
$command="echo ########### && echo Pinging $NET.$i && ping -n 1 -w 100 $NET.$i 2>&1"
start-process "cmd" -argumentlist "/c `"$command`"" -NoNewWindow -RedirectStandardOutput "tmp$i.txt"
}
while($true)
{
if(-not (Get-Process cmd -EA SilentlyContinue))
{
cat tmp*.txt > sweep.txt
break
}
sleep 5
}

请注意,while循环将等待所有cmd.exe进程停止,然后将这些文件分解并统一为sweep.txt。请记住在运行此脚本之前关闭已打开的cmd.exe的任何实例,否则此循环将永远继续:D

最新更新