5

Мне нужно устранить некоторые проблемы на клиентском ПК, на которые я не могу установить дополнительное программное обеспечение, и мне нужна базовая функциональность awk на windows xp & 7.

По сути, мне нужно убрать идентификатор процесса из netstat чтобы я мог использовать его в разных частях скрипта, но не знаю нативной команды, которая могла бы сделать эквивалент awk '{ print $4 }' . Есть ли варианты для меня? Очевидно, я довольно новичок в Windows Cli.

4 ответа4

11

Для таких базовых задач вы можете использовать for /f.

Вместо

command | awk '{ print $4 }'

попробуй это:

for /f "tokens=4" %a in ('command') do echo %a

Обратите внимание, что вы должны использовать %%a вместо %a в пакетных файлах.

4

Пример вывода netstat -n -o :

Active Connections

  Proto  Local Address          Foreign Address        State           PID
  TCP    127.0.0.1:12345        127.0.0.1:23456        ESTABLISHED     4321
  TCP    127.0.0.1:34567        127.0.0.1:45678        ESTABLISHED     5432

Чтобы удалить две верхние строки, направьте вывод в findstr /v "Active Proto" .

Чтобы напечатать только определенные данные столбца, например, Локальный адрес и PID, используйте:

for /f "tokens=2,5" %i in ('netstat -n -o ^| findstr /v "Active Proto"') do @echo Local Address = %i, PID = %j

При использовании в пакетном файле вы должны удвоить знаки% и можете присвоить переменным нужные значения (%% i, %% j и т.д.).

2

Чтобы получить идентификатор процесса (PID):

  • Откройте cmd.exe и введите:
  • tasklist /fi "imagename eq netstat.exe" > D:\test.txt

Эта команда создаст новый текстовый файл с идентификатором процесса netstat (если netstat запущен).
Проблема в том, что этот файл будет содержать не только PID.

Может быть, этого достаточно для начала?

1

Продолжая работу над ответом @ Dennis, вот фрагмент, который я использовал, чтобы извлечь номер версии из файла заголовка C и использовать его для создания нового имени файла.

Мой заголовочный файл выглядит так

 ... stuff
 #define FIRMWARE 8
 .. stuff

Эквивалент UNIX

 f=`awk /FIRMWARE/ { print "image_v" $3 ".txt"; } project_config.`
 echo $f

в DOS есть

 for /f "tokens=3" %%a in ('findstr FIRMWARE project_config.h') do (
   set f=image_v%%a.txt
 )

 echo %f%

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .