Как записать вывод из пакетного файла, но переменная постоянно меняется - PullRequest
0 голосов
/ 27 октября 2018

Итак, это мой первый пост, и я потратил чуть более двух часов, просто пытаясь понять, как это сделать.

Итак, в основном я написал инструмент сканирования портов через Batch и использовал программу под названием tcping, и у меня есть переменные с именем% scan% и% openport%, которые являются текущим открытым портом. Я хочу записать этот порт в текстовый файл, а затем записать новый порт, когда он изменится, но я могу записать только новый порт, так как не могу записать переменную дважды двумя разными способами, потому что он просто обновит% openport% с новым портом.

Вот мой код

@echo off
:: BatchGotAdmin
::-------------------------------------
REM  --> Check for permissions
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" 
"%SYSTEMROOT%\system32\config\system"

REM --> If error flag set, we do not have admin.
if '%errorlevel%' NEQ '0' (
echo Requesting administrative privileges...
goto UACPrompt
) else ( goto gotAdmin )

:UACPrompt
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
set params = %*:"="
echo UAC.ShellExecute "cmd.exe", "/c %~s0 %params%", "", "runas", 1 >> 
"%temp%\getadmin.vbs"

"%temp%\getadmin.vbs"
del "%temp%\getadmin.vbs"
exit /B

:gotAdmin
pushd "%CD%"
CD /D "%~dp0"
::--------------------------------------




REM The code Up there is Property of https://stackoverflow.com/questions/1894967/how-to-request-administrator- access-inside-a-batch-file
REM All code below is coded by Paradex
:PortScan
@echo off
set /p Ip=Enter a IP or Website to ping:
cls
goto :LoopScan

:LoopScan
set scan=0
set /a scan=%scan%+1 
if "%scan%"=="2" goto :LoopScan1
goto :Checkport

:LoopScan1
set /a scan=%scan%+79
goto :Checkport

:Checkport
tcping -n 1 -a -s 1 -w 1000 %ip% %scan%
tcping -n 1 -a -s 1 -w 1000 %ip% %scan% | findstr "Open"

if %errorlevel% == 0 (
cls
color 0a
echo Port is Open.
set openport=%scan%
goto :writedata
) else (
cls
color 4
echo Port is Closed.
)
endlocal
goto :LoopScan1



goto :end


:writedata
if %openport% == %scan% (
cls
goto :loopscan1
) else (
cls

)







echo Open Ports For %ip% > logfile.txt
echo ------------------- >> logfile.txt
echo %openport1% >> logfile.txt


goto :loopscan1




:end

Извините, если вопрос расплывчатый, я никогда раньше не публиковал здесь

1 Ответ

0 голосов
/ 29 октября 2018

Я не могу понять, что вам нужно, но мой лучший способ - предложить вам использовать временные файлы для записи набора установленных переменных, а затем перезвонить с для .

Примерно так:

rem Using only one > will overwrite the file.
echo %openport% > log.tmp

rem Now, let's call it back.
for /f "tokens=*" %%c in ('type "log.tmp"') do set openport=%%~c
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...