Показать полную графическую версию : [решено] Отсортировать список процессов по ProcessID
Dragokas
10-08-2013, 22:12
Подскажите, пожалуйста,
почему переменная !PID:~-4! не раскрывается, если мы собираем поток для передачи через канал к Sort?
@echo off
SetLocal EnableExtensions EnableDelayedExpansion
(
for /f "tokens=1,2 delims=," %%a in ('tasklist /nh /fo csv') do (
@echo off
set /A C+=1
set PID=000%%~b
echo !PID:~-4! %%~a
)) | sort
pause
Foreigner
10-08-2013, 22:51
@echo off
setlocal
(
for /f "tokens=1,2 delims=," %%i in ('tasklist /nh /fo csv') do (
set "pid=0000%%~j"
call echo %%pid:~-4%% %%~i
)
) | sort
Dragokas
11-08-2013, 01:25
Foreigner, спасибо. Так работает.
Dragokas
11-08-2013, 01:40
Забавно. Если написать во внутреннем цикле команду REM - вывода не будет.
почему переменная !PID:~-4! не раскрывается, если мы собираем поток для передачи через канал к Sort? »Потому что команда слева от "|" запускается в отдельном процессе CMD.EXE, в который предварительно копируются все пользовательские переменные окружения, а вот параметры сеанса (в том числе, отложенное расширение переменных, отображение команд и т.п.) сбрасываются в дефолтовые. Другим неприятным моментом такого поведения является то, что все изменения в переменных окружения дочернего CMD.EXE не будут отражены в родительском.
Если написать во внутреннем цикле команду REM - вывода не будет. »альтернативные варианты: REM. , REM: или REM/
Dragokas
13-08-2013, 23:39
все изменения в переменных окружения дочернего CMD.EXE не будут отражены в родительском. »
Да уж. Действительно, нежданчик =)
@echo off
SetLocal EnableExtensions EnableDelayedExpansion
set before=10
(
for /L %%C in (1,1,1) do (
echo %before%
set d=15
set n=%%C& set after=%d%& set after=!d!
echo !n!
echo !after!
)
) 1>&2 | set x=
echo ----------
echo %n%
echo %after%
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.